環境: Ubuntu 16.04、c でプログラムされたデーモン、プロセス管理に systemd を使用。
だから私はユニットファイルを次のように持っています:
[Unit]
Description=Fantastic Service
After=network.target
[Service]
Restart=always
Type=forking
ExecStart=/opt/fan/tastic
[Install]
WantedBy=multi-user.target
そして、私の tastic.c コードでは、基本的に fork() X 個の子プロセスがそれぞれ so_reuseport を実行し、メイン プロセスが終了して子プロセスを残してリクエストを処理します。
上記の設定で問題なく動作し、期待どおりの動作が得られます。
ただし、PIDFile をサービス ユニット ファイルに入れると、アプリケーションによって提供された pid が存在しないことがわかります。これは、要求された数の子プロセスを起動した後にメイン プロセスが終了しているためです。
現在、systemd のドキュメントでは、Type=forking を実行する場合は PIDFile を提供する必要があることを明確に述べていますが、問題は、複数の子プロセスがあり、子プロセスが終了するとメインの親プロセスが終了する場合に単一の pid ファイルを提供する方法です。始める?
何か不足していますか?