如何判断 service 和 systemctl 是否是同一个命令?

如何判断 service 和 systemctl 是否是同一个命令?

我正在尝试使用 Systemd 作为进程管理器来运行 Nginx。

当我运行sudo service nginx start然后键入时ps -aux | grep nginx,它似乎与我使用 启动它时运行的进程相同sudo systemctl start nginx

是这样的话,service可以映射到吗systemctl?我怎么知道?

当我查看/etc/init.d/nginx脚本时,它与 的配置有很大不同/lib/systemd/system/nginx.service

但是,如果我使用该systemctl命令启动 nginx,然后使用该service命令停止它,则可以正常工作。反过来顺序也一样。

答案1

sudo strace -f -e trace=process service nginx status 2>&1 | grep systemctl

答案2

俗话说,“查找文件的方法不止一种”。在这种情况下,并不完全清楚“同一进程正在运行”的含义,因此我将解释这两个可能的问题。

如果您的意思是,如果您首先执行“systemctl ngix start”,然后执行“service ngix start”,则运行相同的进程 ID。这是因为如果守护进程已经在运行,“启动”进程将不会关闭它并启动一个新的守护进程。在这种情况下,结果应该是空操作。做一个停止在进行后续操作之前开始,或使用重新开始命令代替。

如果您确实在两者之间停止(或重新启动)开始命令,并且您会看到 ngix 在这两种情况下都在运行——命令的参数相同,即使进程 ID 不同,那么“问题”是在这两种情况下,最终目标都是让 ngix 运行。内容和配置文件的位置不会更改。您想要使用的选项不会仅仅因为不同的程序启动它们而改变。这几乎就是“条条大路通罗马”的情况。

最后,如果你怀疑系统控制服务是指向同一文件的链接,然后尝试。

cmp `which systemctl` `which service` 

这会告诉你如果系统控制服务两者都包含完全相同的代码(和/或指向同一文件的链接)。

答案3

我将从which systemctland开始which service,然后查看两者的输出,ls -l看看它们是否是相同的文件(通过符号链接)或看起来相似(大小等)。

至少这里(Fedora 23)/usr/bin/systemctl是一个二进制文件,/usr/sbin/service是一个使用 systemd 命令来模拟 SysVinit 命令的 shell 脚本。

相关内容