“服务”和“ /etc/init.d/”之间有什么区别?


113

一段时间以来,我一直在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/


3
新贵食谱包含了合理的切换一个很好的解释。
ændrük

Answers:


103

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

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

service允许从/etc/init.d脚本平稳过渡到新贵脚本。将来,当越来越多的脚本转移到暴发户时,服务仍然可以工作,因为它找到了两种可能性。


6
新贵现在将被淘汰,对吧?
错误的用户名2014年

6
一旦计划到位,systemd将取代新贵-14.04 LTS将使用新贵。这是马克·沙特尔沃思Mark Shuttleworth)在题为“ 失去亲切
并非补丁

28

还要检查手册页中的service命令: man service

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

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

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


2
嗨,@ Joe Marty,这正是我现在正在尝试的问题。我有一个基于“ DISPLAY”环境变量的服务,该环境变量在通过“ service myservice start”启动守护程序时不存在,而在通过“ /etc/init.d/myservice start”启动守护程序时存在。关于如何使用此变量的任何想法吗?
frandevel '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.