我正在尝试使用 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 systemctl
and开始which service
,然后查看两者的输出,ls -l
看看它们是否是相同的文件(通过符号链接)或看起来相似(大小等)。
至少这里(Fedora 23)/usr/bin/systemctl
是一个二进制文件,/usr/sbin/service
是一个使用 systemd 命令来模拟 SysVinit 命令的 shell 脚本。