Debian
使用 systemctl 啟動用 C 編寫的守護程序時遇到問題
我正在嘗試註冊我用 C 編寫的守護程序程序
systemd
。我使用以下腳本,[Unit] Description=App After=network-target [Service] Type=simple ExecStart=/usr/local/bin/daemon Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
我按順序使用以下命令,
sudo systemctl daemon-reload
,sudo systemctl enable
,sudo systemctl start
. 當我從命令行執行程序時程序正常啟動,但如果我通過systemctl
. 它是一個守護程序,有forks
2 個程序。這是錯誤,
Process: 11563 ExecStart=/usr/local/bin/daemon (code=exited, status=1/FAILURE) Main PID: 11563 (code=exited, status=1/FAILURE) Tasks: 1 (limit: 4915) CGroup: /system.slice/uhp-service.service └─11361 /usr/local/bin/daemon
程式碼=退出,狀態=1/失敗
您的程序以狀態 1 退出。這可能意味著什麼,只有您知道。您的程序何時返回程式碼 1?
也就是說,您確實終止了返回成功的主程序,不是嗎?
int main(...) { ... return EXIT_SUCCESS; }
因為否則可能發生的是
systemd
啟動你的守護程序,你的守護程序分叉,返回失敗,並systemd
執行清理——即使它們執行正確,也會殺死分叉的執行緒。