我们在启用一些服务的时候,经常会用到这个service命令,比如启动apache2的命令$sudo service apache2 start
等等。用他来开启或者关闭我们的服务可谓是非常的方便,因为service命令基本都会支持start、stop、restart之类的参数,十分的好记。
作用原理
那么service命令的原理是什么呢?为什么他能做到这么统一的样式呢?
其实答案很简单,我们来查看帮助文档就知道了:
1 | $man service |
上面这段话已经说了很清楚了,这个service命令,会去查找/etc/init.d/和/etc/init/目录下的可执行脚本。这些脚本通常保证得实现start,stop,status之类的命令来实现相应的功能。也就是说,我们通常类似service apache2 start
的命令完全可以用/etc/init.d/apache2 start
来代替,效果一模一样。
其实他做的事情就是这么简单,一般就是去/etc/init.d/目录下寻找脚本来执行。所以问题的重点就变成了这些脚本到底是什么样的。
这就牵涉到/etc/init.d/下的启动脚本格式的问题了。
启动脚本
本着自力更生的原则,自己查看man文档,在service命令的末尾他给了一个/etc/init.d/skeleton文件叫我们看。那就打开来看看喽~~:
1 |
|
哦~原来这就是所有init.d目录下脚本的框架了~~难怪他能保证良好的兼容性,原来所有的service原则上都是从这个框架上生成的。。。这个文件看上去挺长的,其实内容很少,主要就是一个case语句根据相应的参数进行不同的输出。这里不做过多讨论,以后需要自己写一个启动脚本的时候再来研究也不迟。