当前位置: 首页>>技术问答>>正文


“Service”和“/etc/init.d/”有什么区别?

, ,

问题描述

我一直在管理服务器安装的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的功能。所以总结一下:

  1. service可以从/etc/init或/etc/init.d(upstart或System V)运行脚本,

  2. service在可预测的环境中运行脚本。

“predictable environment”方面可能会导致您的问题,如果您的脚本由于某种原因依赖于环境变量。可能有办法解决这个问题,但我不知道它是什么,这超出了这个问题的范围:)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/515.html,未经允许,请勿转载。