
事前定義された時間内に出力が生成されない場合は、systemdサービスを再起動できますか?
明らかにハングするスクリプトがありますが、systemd(またはこの場合はPython)はそれを検出できないため、失敗状態にはなりません。
ただし、出力ロギングは停止されるため、1分間出力がない場合はサービスを再起動できます。 systemdを使用してこれを達成できますか?
私の現在のシステムファイル:
[Unit]
Description=SOmething
After=network.target
[Service]
WorkingDirectory=/home/user/system/something
User=nobody
ExecStart=/usr/bin/python2 something.py
Restart=on-watchdog
RestartSec=10s
[Install]
WantedBy=multi-user.target
答え1
私はsystemdが少なくともこれを行うことができるとは思わない。systemd.service(5)
マニュアルページにはそのような内容が記載されていないようです。
しかし、あなたができることは、systemdに組み込まれたウォッチドッグを使用することです。
WatchdogSec=
定期的にサービスを設定して送信することでWATCHDOG=1
これを行うことができますsd_notify
。これを設定した場合、WatchdogSec=30
サービスは少なくとも30秒ごとにsystemdに通知する必要があります。
サービスが中断されると、systemdに通知されなくなり、systemdはそれに応じてサービスを終了します。
restart=on-watchdog
(すでに持っていますが、それなしでは何もできません)を使用すると、監視者WatchdogSec=
によってサービスが終了した後、systemdはサービスを再起動します。