问题描述
我一直在管理服务器安装的Ubuntu和Ubuntu风格一段时间 – 我已经相当适应/etc/init.d/
重新启动服务。现在我收到这条消息:
root@tatooine:~# /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 14048
这似乎是在Ubuntu的最新LTS中产生的 – 为什么? /etc/init.d/
有什么不好,以及service
和/etc/init.d/
有什么区别?
最佳解决方案
/etc/init.d
脚本是做事的老方法。它们来自System V标准。但是,这些脚本只能以特定顺序触发,因此不能建立真正的依赖关系。
因此,开发人员已经开发了一个新的脚本(在/etc/init
中),以取代所有/etc/init.d
脚本。
service
允许从/etc/init.d
脚本到新兴脚本的平滑过渡。未来,当越来越多的脚本转移到新贵时,服务仍然可以发挥作用,因为它找到了两种可能性。
次佳解决方案
同时检查服务命令的手册页:man service
service
在可预测的环境中运行脚本(工作目录为/,且仅设置了2个环境变量:LANG和TERM)。它还增加了执行--full-restart
的功能。所以总结一下:
-
service
可以从/etc/init或/etc/init.d(upstart或System V)运行脚本, -
service
在可预测的环境中运行脚本。
“predictable environment”方面可能会导致您的问题,如果您的脚本由于某种原因依赖于环境变量。可能有办法解决这个问题,但我不知道它是什么,这超出了这个问题的范围:)