Systemctl和service命令的区别

76

我总是以这种方式运行我的Apache服务器:

sudo service apache2 start

但是在许多指南中,我看到了像这样的命令:

sudo systemctl start apache2

有人可以简要写出这些命令之间的区别,并为我提供关于在日常工作中应该使用哪个命令的建议吗?


Can somebody shortly write the difference between these commands and give me advice about what command I should use in everyday work?

1
Systemctl和Service之间的区别 - Benyamin Jafari
4个回答

56

service 命令作用于 /etc/init.d 目录下的文件,主要用于旧的 init 系统。而 systemctl 命令作用于 /lib/systemd 目录下的文件。如果在 /lib/systemd 目录下存在相应的服务文件,则优先使用该文件;否则将退回到 /etc/init.d 目录下的文件。

另外,如果您使用类似 ubuntu-14.04 的操作系统,则只能使用 service 命令。

因此,如果您的操作系统支持 systemctl 命令,最好还是使用它。


28
根据这个答案service 是所有三种 init 系统(/init,systemd 和 upstart)的包装器。 - Dan Swain
8
丹·斯温说得对,service是一个包装器,因此比仅在/etc/systemd/system/中具有apache服务配置的systemctl更可取。 - stelios
还要注意两个命令之间的语法差异,sudo service <service_name> <action>sudo systemctl <action> <service_name> - Vinu Raja Kumar C

27

参考这个答案service是一个“高级”命令,用于管理不同的UnixLinux系统中的startrestartstopstatus服务。根据“低级”服务管理器的不同,service会重定向到不同的二进制文件。

例如,在CentOS 7上,它会重定向到systemctl,而在CentOS 6上,它直接调用相对路径/etc/init.d的脚本。另一方面,在旧版的Ubuntu上,它会重定向到upstart。

service适用于基本的服务管理,而直接调用systemctl会提供更多的控制选项。

此外,systemctl从以下路径运行服务文件:/lib/systemd/


4
“将一个答案复制/粘贴到另一个回答中”不如“投票关闭”作为重复问题,这样会更好,你同意吗? - rinogo
3
@rinogo 这不仅仅是复制和粘贴。实际上,这是一种特定的引用和引述方式。此答案所给出的得分也表明了该答案在填补空缺方面是必需的。请记住我们的目标是尽可能地简化并解决提问者的问题。 - Benyamin Jafari

2

该服务最初作为 sysvinit 的辅助脚本启动,后来成为一个包装脚本,无论是否具有 sysvinit 或 systemd 都可以使用。


1
对我来说,service更可靠,特别是在自动化任务中。它包装了不同的初始化系统命令,因此您可以在旧发行版上使用它并期望获得相同的结果。根据我的观察,在systemd单元上通常没有工作的reload命令(更新守护程序配置而不杀死进程),而使用service <service-name> reload正常运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接