はい; systemdをいじる前に、まずバグのあるプログラムを修正します。
MariusMatutiaeはまったく正しいです。プログラムに問題があります。デッドロックします。systemdをいじるのは答えではありません。せいぜい、それは気晴らしです。プログラムが壊れないように修正してください。正しいことにエネルギーを向けてください。
そうは言っても、他の人たちは質問そのものではなく、質問のタイトルのためにここに来るでしょう。彼らの利益のために、適切な質問を無視して、タイトルへの答えがあります:
はい、systemdはデーモンを監視し、会話が停止すると自動的に再起動します。ただし、古いデーモンだけではありません。mvpが指摘しているように、デーモンがハングしたことを知る方法はありません(この宇宙では、少なくとも停止する問題は決定できません)。systemdやその他のコンピュータープログラムは、スローされたランダムプログラムがデッドロックしたり、無限ループに陥ったりしたことをゼロから推測することはできません。ここで得られる最善の方法は、デーモンが必要な時間内に通常の「ハートビート」操作を実行していないことを検出することです。
したがって、systemdのウォッチドッグ機能を利用するデーモンは、systemd固有のプロトコルであるsd_notifyプロトコルを使用するように作成する必要があります。これにより、デーモンコードが少し複雑になります。デーモンは、適切に記述されていれば、ウォッチドッグ機能を有効にして呼び出されているかどうかも確認する必要があるため、さらに複雑です。
systemdのウォッチドッグ機能を利用するためにこのプロトコルを話すデーモン
- …
WATCHDOG_USEC
環境変数を確認する必要があります。
- … sd_notify()は、その有効期間中、
WATCHDOG=1
オプションを設定した状態で、約WATCHDOG_USEC
/ 2の間隔で継続的に頻繁に呼び出す必要があります(「USEC」はマイクロ秒を表します)。
- …
Type=notify
ユニットファイルに設定されている必要があります。
- … ユニットファイルに
NotifyAccess=main
(または=all
)設定する必要があります。
- … ユニットファイルに
WatchdogSec=
秒を設定する必要があります。
- …とリンクする必要があります
libsystemd-daemon.so
このコーディングの詳細を知りたい場合は、マニュアルを読んだ後、必ず正しいStackExchangeにアクセスしてください。これはスーパーユーザーです。StackOverflowはそこにあります。
参考文献
- レナート・ポタリング。2011-04-12。 ウォッチドッグ。Freedesktop.org。
for(;;) do_something();
か?