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

“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/

答案1

/etc/init.d脚本是旧的做法。它们来自 System V 标准。但是,这些脚本仅按特定顺序触发,因此无法建立真正的依赖关系。

因此,upstart 的开发目的是用/etc/init.dupstart 脚本替代所有脚本(在 中/etc/init)。

service允许从脚本顺利过渡/etc/init.d到 upstart 脚本。将来,当越来越多的脚本转移到 upstart 时,服务仍将正常工作,因为它找到了两种可能性。

答案2

另请查看服务命令的手册页:man service

service在可预测的环境中运行脚本(工作目录为 /,并且仅设置了 2 个环境变量:LANG 和 TERM)。它还增加了执行的能力--full-restart。总结一下:

  1. service可以从 /etc/init 或 /etc/init.d (upstart 或 System V) 运行脚本
  2. service在可预测的环境中运行脚本。

如果您的脚本由于某种原因依赖于环境变量,则“可预测环境”方面可能会给您带来问题。可能有办法解决这个问题,但我不知道是什么,而且这超出了这个问题的范围 :)

相关内容