サービスを使用していますが、予期せず終了(停止)しました。どのように停止しても自動的に再起動したい!設定されたがRestart=on-abort
再起動されませんでした。私が作成したサービスではなく、他のベンダーが提供するサービスなので、サービスの競合の根本原因を追跡したいのですが、根本原因が見つかるまでシステムを実行し続けるためのソリューションも必要です。サービスは1日0回から3回まで死ぬので、それほど頻繁には発生しません。
現在のサービス設定はRestart=on-abort
サービスファイルで定義されています。/etc/systemd/system/someone-elses.service
では、どういうRestart=on-abort
意味ですか?
restart =のさまざまな値が何を意味するのかを検索して見つけましたが、マニュアルページには何もありません。
答え1
さまざまな条件に基づいてサービスを再起動するようにsystemd.serviceを設定できます。 この systemctl のマニュアルページ理由の良い説明があり、その理由がこの回答に含まれているため、この回答はそれ自体で有効になる可能性があります。
定義Restart=on-abort
は クリーンなシャットダウン状態を指定しないキャプチャされていない信号が原因でサービスプロセスが終了した場合にのみ、サービスが再起動されます。 これは、SIGHUP、SIGINT、SIGTERM、SIGPIPE 以外の信号を意味します。この4つの信号は次のように説明されています。きれいな信号systemctlのマニュアルページを介して。
Restart=always
私の場合は、プロセスがどのように終了または終了しても再起動したいので、実際にそうしたいと思います。永続的な再起動を防ぐために、再起動の間に少し時間を置きたいので、このプロパティはRestartSec=15s
私にとって重要です(これは起こりたくありませんが、これがまさにこの設定がある理由です)。
以下は から抜粋したものです。systemctl のマニュアルページSO形式で指定されます。
再開=値は
no
、、、、、、、またはです。on-success
on-failure
on-abnormal
on-watchdog
on-abort
always
以下は各値の説明です。
いいえ(デフォルト) - サービスに設定されている場合は
no
再起動されません。成功- に設定すると、
on-success
サービスプロセスが完全に終了した場合にのみ再起動されます。この場合、クリーンな終了は、終了コード0またはSIGHUP、SIGINT、SIGTERM、またはSIGPIPE信号の1つとSuccessExitStatus =で指定された終了ステータスと信号を意味します。失敗の場合- に設定すると、
on-failure
プロセスがゼロ以外の終了コードで終了すると、信号(コアダンプを含む、上記の4つの信号を除く)は、タスク(サービスの再ロードなど)によって終了し、サービスが再開されます。タイムアウトがある場合、構成された監視タイムアウトがトリガーされる場合。異常状態- に設定すると、
on-abnormal
信号(コアダンプを含む、上記4つの信号を除く)によってプロセスが終了したり、作業がタイムアウトしたり、監視タイムアウトが発生した場合にサービスが再開されます。中断された場合- に設定すると、
on-abort
クリーン終了状態に指定されていないキャプチャされていない信号が原因でサービスプロセスが終了した場合にのみサービスが再起動されます。 on-watchdogに設定されている場合、サービスは監視タイムアウトが期限切れになった場合にのみ再起動されます。いつも- に設定すると
always
正常に終了したり、信号によって異常終了したり、タイムアウトしてもサービスを再起動します。
この素晴らしい答えも参照してください! https://unix.stackexchange.com/a/507917/119816