也许这是一个微不足道的问题,但我并不完全清楚。在我们的一台服务器上,我们运行了一些由 启动的后台进程service
,还有一些由 启动的后台进程systemctl
,如下所示:
$ service nginx start
$ systemctl start gunicorn
这两个命令有什么区别?哪一个是处理后台服务的首选方式?如何配置首选命令?
答案1
service
是用于在不同的 unix 和 linux 中启动和停止服务的“高级”命令。根据“低级”服务管理器,service
重定向到不同的二进制文件。
例如,在 CentOS 7 上,它会重定向到systemctl
,而在 CentOS 6 上,它会直接调用相关/etc/init.d
脚本。另一方面,在较旧的 Ubuntu 版本中,它会重定向到upstart
service
对于基本的服务管理来说已经足够了,而直接调用systemctl
可以提供更多的控制选项。
答案2
systemctl
基本上是的更强大版本service
。
使用service
您只能执行与服务相关的命令(即status
、reload
、restart
),而使用systemctl
您可以使用更高级的命令,例如:
systemctl is-failed name.service # check if service failed to load
或屏蔽服务:
systemctl mask name.service
有很多关于这一页来自 Ask Ubuntu。
答案3
systemctl
是控制守护进程/服务的主要实用程序systemd
,
而service
命令是世界上的传统实用程序SysVinit
。
systemd 的功能之一是与 SysVinit/legacy 命令兼容,
因此,如果您有该systemctl
命令,
service foo start
它将是一个包装器systemctl start foo
。
同样的故事chkconfig
。