Restart = noはsystemdのOneshotタイプでは機能しません。

Restart = noはsystemdのOneshotタイプでは機能しません。

というサービスがありますType=oneshot。一部のサービスは、Wantsおよびを使用するこのサービスに依存していますRequire

systemdマニュアルページによると、Restart=noこれはデフォルト設定であり、失敗してもサービスは再起動されません。しかし、私の場合は、journalctlサービスが2回再起動されたというログを見ることができます。

したがって、質問はRestart=no存在しても、なぜ再起動する必要があるのでしょうか。Restart=noサービスファイルに明示的に追加しようとしましたが、まだ再起動されます。結果が成功か失敗か、私のサービスは一度だけ実行されることを望みます。

私のSystemdバージョンは250です:systemd 250(250.5+)

ベストアンサー1

Restart=これはサービス内部仕様にすぎず、そのユニットを呼び出す他のサービスには拡張されません。 ~から手動

Restart=

サービスの開始時に再起動する必要があるかどうかを設定します。サービスプロセス終了した、終了した、またはタイムアウトしました。サービスプロセスは主要なサービスプロセスである可能性がありますが、、、、、ExecStartPre=またはExecStartPost=で指定されたプロセスのいずれかです。システム操作(サービスの停止または再起動など)によってプロセスが終了した場合、サービスは再起動されません。タイムアウトには、欠落している監視デバイスの「接続の維持」の期限、サービスの開始、再ロード、およびジョブの停止のタイムアウトが含まれます。ExecStop=ExecStopPost=ExecReload=

再起動は、デバイス自体のプロセスのみを意味します。

そして、例えばWants=手動)

ハイブがすでに起動している場合は、このオプションにリストされているデバイスが起動します。ただし、リストされているデバイスが起動しない場合、またはトランザクションに追加できない場合は、トランザクション全体の有効性に影響を与えず、そのデバイスは引き続き開始されます。これは、あるデバイスの起動を別のデバイスの起動に接続するための推奨方法です。

その他のユニットセクションには、記載されているオプションはRestart=ありません。[Service]


他のデバイスからサービスの再起動を要求することを完全に抑制するために、2つのオプションを考えました。

1. 本機にかかってきたすべての通話を削除します。

明らかに、これはすべての呼び出し単位を変更し、Wants=同様の参照を削除し、起動時に呼び出しを維持することを意味します。

2. プロセスが失敗してもデバイスを成功させます。

常に成功するようにプロセスを直接変更できます。

ExecStart=/bin/bash -c '/path/to/executable || true'

もちろん、実行可能ファイルがsystemdクエリに失敗したかどうかはわかりません。

おすすめ記事