web-dev-qa-db-ja.com

Systemd Service Type oneshotとsimpleの違いは何ですか

systemd service Typeoneshotsimpleの違いは何ですか?この link は、タイマーにsimpleの代わりにoneshotを使用することを示しています。正しく理解できません。

33
Dinesh P.R.

Type=oneshotサービスユニット:

  • 最初のプロセスが終了するまで開始操作をブロックし、その状態は「アクティブ化中」として報告されます。

  • 最初のプロセスが終了すると、RemainAfterExit=trueが設定されていない限り、「アクティブ化」から「非アクティブ」に直接移行します(この場合、プロセスなしで「アクティブ」になります!)。

  • 任意の数(0以上)のExecStart=ディレクティブを連続して実行できます(開始された各プロセスが終了するのを待ってから次のプロセスを開始します)。

  • ExecStart=は省略できますが、ExecStop=があります(RemainAfterExit=trueとともに使用すると、システムのシャットダウン時に実行するように調整できます)。

Type=simpleサービスユニット:

  • 開始操作をブロックしません(つまり、まだ初期化中であっても、最初のプロセスを分岐した直後に「アクティブ」になります!)。

  • 最初のプロセスが終了すると、「アクティブ」から「非アクティブ」に移行します(RemainAfterExit=オプションはありません)。

  • 「設定エラーが原因で起動時に終了した」などの状況と「500msのランタイム後にクラッシュした」などの状況を区別する方法がないため、通常は推奨されません。

Type=oneshotType=simpleの両方のユニット:

  • 最初のプロセスの子を無視するため、これらのモードをフォークプロセスで使用しないでください(注:Type=oneshotKillMode=noneと一緒に使用できますが、あなたが何をしているのか知っている)。
49
intelfx

Systemdの観点からすると、Type=simpleは一種の火事であり、忘れられます。 Systemdは、ExecStart=で定義されたプロセスをフォークし、プロセスが開始に失敗しても進行します。

0
Umut