サービスを開始または再起動するとsystemdがハングする

サービスを開始または再起動するとsystemdがハングする

16.04 にアップグレードした後、systemd を初めて使用していますが、サービスの起動と再起動で問題が発生しています。(たとえば) を実行すると...

systemctl start djalbat.com

... 動作しているように見えますが、プロンプトが返されず、ハングしてctrl-cいるように見えます。プロンプトが返されてからサービスが起動したかどうかをテストすると、起動したようです。これが発生する原因は構成に何があるのでしょうか? 原因は次のとおりです。

[Unit]
Description=djalbat.com


[Service]
Type=forking
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log


[Install]
WantedBy=multi-user.target

また、最後のWantedBy指示の必要性を指摘していただけるとありがたいです。

答え1

つまり、設定で実行されるコマンドExecStartフォーク一方、systemdサービスは実行可能ファイルのフォーク用に構成されていました。これにより、systemctl実行可能ファイルのフォークを待機することになり、コマンド ラインが返されなくなります。

実行可能ファイルの正しい設定は、フォークを使用することですType=simple

[Unit]
Description=djalbat.com

[Service]
Type=simple
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log

[Install]
WantedBy=multi-user.target

WantedByこのユニットをターゲットに接続するために が必要なので、適切なターゲットに到達したときにこのユニットまたはサービスが自動的に起動し、サービスが自動的に起動するように有効化されます。

systemctl enable djalbat

systemdサービスファイルに変更を加えた後は、必ず更新してください。

systemctl daemon-reload

関連情報