systemdサービスを使用してデーモンプロセスを実行すると、返されません。

systemdサービスを使用してデーモンプロセスを実行すると、返されません。

systemdサービスでデーモンプログラムを実行しようとしていますが、コマンドプロンプトから手動で(systemctl start)またはdebianインストールの一部として(dpkg -i myapp.deb)スクリプトを起動すると、コマンドが実行されます。戻ることなく実行されます。コマンドプロンプトに移動します。

[Unit]
Description=MyDaemon
After=NetworkManager.service

[Service]
WorkingDirectory=/usr/local/bin/my-daemon
ExecStart=/usr/local/bin/my-daemon/my-daemon
Type=forking

[Install]
WantedBy=default.target

実行中のデーモン自体がデーモンであるため、「返却」しないことを確認できます。また、システムを再起動すると、サービスはデーモンを正常に実行しました。

しかし、「systemctl start」でサービスを開始すると、サービスはバックグラウンドでデーモンを実行し、特に「Type = forking」を指定した後にコマンドプロンプトに戻ることを期待しました。 「Type=Simple」に設定してみましたが、結果は同じです。

私は見たことがない systemdを使ってデーモンを作成する方法は? そしてシステムサービスは終了せずに実行されます。しかし、これらのどれも私の問題を解決しません。

誰でも助けてもらえればいいでしょう。

ありがとうございます。

答え1

私は昨夜この正確な問題に対処しました。 2つのことを解決する必要があります。 selinuxポリシーと環境変数はsystemdとログインしたスーパーユーザーの間で大きく異なる可能性があるため、コマンドラインでテストすると誤検出が発生する可能性があります。 selinuxを実装すると、違いが膨大になる可能性があります。失敗するのではなく、systemdは成功(終了0)を待って無制限の実行を試みます。詳細については、systemctl start my-daemonを実行してからCTL + Cを実行してサービスの開始をキャンセルし、systemctl status my-daemonを実行してください。状態には、失敗した理由とまだ終了していない理由が確実に表示されます。

もう1つのことは、[service]セクションで他のパラメータの中で以下を使用することです。

Type=simple
RemainAfterExit=no

Type = forkingが役に立つかもしれません。

関連情報