Debian

使用 systemctl 啟動用 C 編寫的守護程序時遇到問題

  • January 7, 2021

我正在嘗試註冊我用 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. 它是一個守護程序,有forks2 個程序。

這是錯誤,

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執行清理——即使它們執行正確,也會殺死分叉的執行緒。

引用自:https://unix.stackexchange.com/questions/628066