
私はこのsystemctlタスクを作成しました。
[Unit]
Description=Evercam Media
After=network.target
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/opt/evercam_media
ExecStart=/opt/evercam_media/bin/evercam_media start
ExecStop=/opt/evercam_media/bin/evercam_media stop
Restart=always
RestartSec=5
Environment=LANG=en_US.UTF-8
SyslogIdentifier=evercam_media
[Install]
WantedBy=multi-user.target
うまくいきたいので、うまくいきますが、起動と停止時にいくつかのログを表示したいと思います。なぜなら、開始ジョブを開始または停止すると、ジョブが停止しているか待機中であることを示しますが、何も表示されないためです。追加できますか? 「開始済み」または「停止済み」などのログがいくつかありますか?
また、私がしていることの進行状況を見るとsystemctl status evercam_media.service
こう言ってくれる。
● evercam_media.service - Evercam Media
Loaded: loaded (/etc/systemd/system/evercam_media.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2017-11-07 10:53:40 CET; 1h 3min ago
Process: 25830 ExecStop=/opt/evercam_media/bin/evercam_media stop (code=exited, status=0/SUCCESS)
Process: 25692 ExecStart=/opt/evercam_media/bin/evercam_media start (code=exited, status=0/SUCCESS)
Main PID: 25728 (code=exited, status=1/FAILURE)
アクティブ:失敗? ?
なぜ失敗せずに停止したと言わないのですか?どんな助けでも大変感謝します。ありがとうございます。
答え1
systemdデバイスは非同期コマンド用に設定されType=forking
使用されます。ExecStop=
これは、systemdが直後に基本プロセスを終了することを意味します。
/opt/evercam_media/bin/evercam_media 停止やめる。
Restart=always
代わりに使用されますRestart=on-failure
。
に記載されているように文書:
通常、サービスのシャットダウンのみが必要になり(たとえば、終了シグナル形式をキューに追加します)、サービスがシャットダウンするのを待たないこの設定のコマンドを指定するだけでは不十分です。上記のように、コマンドが終了した直後にサービスの残りのプロセスが終了するため、完全に停止しない可能性があります
KillMode=
。KillSignal=
したがって、指定されたコマンドは非同期操作ではなく同期操作でなければなりません。
この問題を解決するためにできることはいくつかあります。 1をTimeoutSec=
返さない終了信号を使用または同期するevercam_media
方法を見つけますExecStop=
。
ログメッセージの詳細については、フラグを参照してくださいevercam_media
。