Linux service相关

来源:互联网 发布:头皮毛囊炎 知乎 编辑:程序博客网 时间:2024/06/16 17:44

1 service(也成daemon)表示后台运行的程序, 一般随系统的启动自动地启动且在用户log off后仍能继续运行. 该daemon进程一般在启动后需要与父进程断开关系, 并使进程没有控制终端(tty). 因为daemon程序在后台执行, 不需要与终端交互, 通常就关闭STDIN STDOUT和STDER. daemon无法输出信息, 可以使用syslog或自己的日志系统进行日志处理.
可以使用/etc/rc.d/init.d/funtions脚本中的daemon函数来将一般的启动为daemon, 例如nfs daemon的启动:

echo -n $"Starting NFS daemon: "daemon rpc.nfsd $RPCNFSDARGS $RPCNFSDCOUNTETVAL=$?echo[ $RETVAL -ne 0 ] && exit $RETVAL

2 /etc/init.d -> /etc/rc.d/init.d : /etc/rc.d/init.d 下包含了所有的service的控制脚本,/etc/init.d 是 /etc/rc.d/init.d 的链接。

/etc/rc*.d -> /etc/rc.d/rc*.d : /etc/rc.d/rc*.d 下包含了所有的service的自动启动选项的配置,/etc/rc*.d 是 /etc/rc.d/rc*.d 的链接。

/etc/rc.d/rc*.d/ 下的脚本是对 /etc/rc.d/init.d 下的脚本的链接,只是名字增加K或S前缀,用来表示自动启动或自动停止。

所有的service相关的目录树结构如下:

/etc
|– init.d -> rc.d/init.d
|– rc -> rc.d/rc
|– rc.d
| |– init.d
| | |– NetworkManager
| | |– network
| | |– nfs
| | |– xinetd
| | |– … …
| |– rc
| |– rc.local
| |– rc.sysinit
| |– rc3.d
| | |– K02NetworkManager -> ../init.d/NetworkManager
| | |– K20nfs -> ../init.d/nfs
| | |– S10network -> ../init.d/network
| | |– S56xinetd -> ../init.d/xinetd
| | |– … …
|– rc.local -> rc.d/rc.local
|– rc.news
|– rc.sysinit -> rc.d/rc.sysinit
|– rc0.d -> rc.d/rc0.d
|– rc1.d -> rc.d/rc1.d
|– rc2.d -> rc.d/rc2.d
|– rc3.d -> rc.d/rc3.d
|– rc4.d -> rc.d/rc4.d
|– rc5.d -> rc.d/rc5.d
|– rc6.d -> rc.d/rc6.d

3 一个service的组成和部署
一个service通常包含一个可执行的文件和一个service控制脚本. 作为service程序本身的可执行程序一般存储在/usr/bin下, 作为控制service的脚本一般存储在/etc/rc.d/init.d下, 且控制service的脚本的格式相对固定, 至少支持start, stop, status参数.

4 service的管理工具/sbin/service
可以使用工具/sbin/service来查看和管理系统上的所有的service, 例如查看所有的service的状态使用/sbin/service –status-all, 或者启动停止或重启某个service为/sbin/service XXX start/stop/restart.
打开/sbin/service脚本, 我们可以看到其实service命令实现很简单, 就是遍历/etc/init.d(-> /etc/rc.d/init.d) 下的所有的service控制脚本, 执行相应service控制脚本中的操作. 可以使用命令cat /sbin/service 来查看/sbin/service的实现.

0 0