systemctlを使用してCで書かれたデーモンを起動したときに発生する問題

systemctlを使用してCで書かれたデーモンを起動したときに発生する問題

systemdCで作成したデーモンを登録しようとしています。私は次のスクリプトを使用します。

[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 enablesudo systemctl startコマンドラインからプログラムを実行するとプログラムは正常に起動しますが、経由で実行するとプログラムは起動しませんsystemctl。 2つのプロセスを持つデーモンですforks

これはエラーです。

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で終了します。これが何を意味するのか、あなただけが知っています。プログラムはいつコード1を返しますか?

それはあなたです。するメインプログラム終了リターン成功、そうではありませんか?

int main(...) {
    ...
    return EXIT_SUCCESS;
}

systemdそうしないと、デーモンを起動すると、デーモンが分岐して失敗を返し、クリーンアップを実行して、分岐systemdしたスレッドが正しく実行されていても分岐したスレッドを終了することがあります。

関連情報