![要重新启动服务(例如 httpd),我应该使用 /etc/init.d httpd restart 还是 /sbin/service httpd restart?](https://linux22.com/image/498720/%E8%A6%81%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%EF%BC%88%E4%BE%8B%E5%A6%82%20httpd%EF%BC%89%EF%BC%8C%E6%88%91%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%20%2Fetc%2Finit.d%20httpd%20restart%20%E8%BF%98%E6%98%AF%20%2Fsbin%2Fservice%20httpd%20restart%EF%BC%9F.png)
每当我需要在 RHEL VPS 上重新启动 Apache 时,我都会输入sudo /sbin/service httpd restart
。但是我注意到很多文章建议使用sudo /etc/init.d httpd restart
。
有什么区别吗?如果有,我应该何时使用它们?
答案1
从手册页中:
服务在尽可能可预测的环境中运行 System V init 脚本,删除大多数环境变量并将当前工作目录设置为 /。
然后它调用init.d
脚本。因此它们都完成了相同的事情,只不过通过调用脚本/sbin/service
可以确保 shell 中的某些环境变量不会破坏脚本init.d
。
答案2
使用/sbin/service
是件好事,因为它为守护进程提供了一个全新的工作环境,没有任何可能令人讨厌的环境变量妨碍并造成破坏。至少,这是在工作中需要它的理由;我一直直接在我的其他发行版机器上使用 init 脚本,它并没有造成明显的问题,但我确信确实存在一个正在/sbin/service
解决的问题。也许 RHEL 系统在默认环境中有更多垃圾。
答案3
我的建议是,只要您实际登录到机器,就使用您想要的任何脚本,/etc/(init.d|rc.d)/daemon-name
如果您正在编写脚本,则使用脚本,原因是后者通常更易于移植。如果我没记错的话,基本软件包安装中附带的唯一发行版/sbin/service
是 RH 风格的,即 RHEL、CentOS、Fedora。例如,我的 Debian 系统没有这个脚本,但这对您的环境来说可能无关紧要。