systemdは分岐デーモンの再起動失敗をサポートしますか?

systemdは分岐デーモンの再起動失敗をサポートしますか?

最初はStackOverflowに投稿、来て聞いてください。その会話を振り返ると -

  1. いいえ、実際に何が起こるかを確認するために変更を試すことはできませんでした(本番サービスの実行に影響を与える可能性があります)。
  2. RTFMのデューデリジェンスが完了しました。彼らはこれに関与しません。

私の元の質問は次のとおりです。

systemd私のユニットファイルに次のものがあるとしましょう。

Type=forking
Restart=on-failure

親プロセスは状態0(子プロセスが正常に開始されました)で終了します。ある時点で、子供はゼロ以外の状態で死にます。どうしたの? systemdサブデーモンPIDを追跡できます。

Process: 1768 ExecStart=/bin/mydaemon (code=exited, status=0/SUCCESS)
Main PID: 1770 (mydaemon)

親終了状態だけを見てみるべきでしょうかRestart=on-failure、それとも子どもを見てみるべきでしょうか?

ベストアンサー1

以下の単位ファイルを作成しました。

[Unit]
Description=Something

[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure

script.shには次の内容が含まれています。

#!/bin/sh
echo "Forking"
/tmp/myscript.sh &

myscript.shには次の内容が含まれています。

#!/bin/sh
sleep 60
exit 1

もちろん、60秒ごとにsystemdはサービスを再起動します。

示されているように、他のPIDと開始時間を確認し、親プロセスを再起動することを確認してください。

linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
  Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4396 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4396 /bin/sh /tmp/script.sh
           └─4397 sleep 60

Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
  Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
  Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4420 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4420 /bin/sh /tmp/script.sh
           └─4421 sleep 60

Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.

おすすめ記事