
systemd
Cで作成したデーモンを登録しようとしています。私は次のスクリプトを使用します。
[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
。 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
したスレッドが正しく実行されていても分岐したスレッドを終了することがあります。