Linux
將程序作為服務或直接執行,有什麼區別
這可能是一個有點困惑的問題……
我最近開始玩 docker 並嘗試設置一個基本的燈伺服器。
我有一個帶有 httpd、php 和 mysql 的 centos 的 docker 映像。
但是,在 docker 容器中,我無法像通常通過 systemd / service 那樣啟動服務。
我可以通過 httpd 直接執行
/usr/sbin/httpd
那麼,如果執行 httpd via
/usr/sbin/httpd
而不是 via有什麼區別systemctl start httpd
呢?是否有“正確”的方法來停止或重新啟動 httpd?- 我以為我可以殺死該程序,但它似乎啟動了大約 10 個 apache 程序。
我很欣賞這不是一個特別集中的問題,但任何指向相關材料的指針都將不勝感激。
systemctl
如果您的 PID 1 不是 systemd,則不能使用。您可以使用 找到您的 PID 1ps -q 1
。能夠以正常方式啟動和停止服務是本文中提到的在非特權容器中執行 systemd 的優勢之一。如安德烈的回答中所述,其他人正在記錄或跟踪子程序。
systemd 服務將以與直接執行類似的方式啟動程序,但它將跟踪所有分叉的程序和執行緒。這意味著當您
systemctl stop apache
關閉所有子程序時。使用 systemd 程序也很好,因為它們將在後台執行並且可以在系統啟動時啟動。