systemd
service Type
oneshot
とsimple
の違いは何ですか?この link は、タイマーにsimple
の代わりにoneshot
を使用することを示しています。正しく理解できません。
Type=oneshot
サービスユニット:
最初のプロセスが終了するまで開始操作をブロックし、その状態は「アクティブ化中」として報告されます。
最初のプロセスが終了すると、RemainAfterExit=true
が設定されていない限り、「アクティブ化」から「非アクティブ」に直接移行します(この場合、プロセスなしで「アクティブ」になります!)。
任意の数(0以上)のExecStart=
ディレクティブを連続して実行できます(開始された各プロセスが終了するのを待ってから次のプロセスを開始します)。
ExecStart=
は省略できますが、ExecStop=
があります(RemainAfterExit=true
とともに使用すると、システムのシャットダウン時に実行するように調整できます)。
Type=simple
サービスユニット:
開始操作をブロックしません(つまり、まだ初期化中であっても、最初のプロセスを分岐した直後に「アクティブ」になります!)。
最初のプロセスが終了すると、「アクティブ」から「非アクティブ」に移行します(RemainAfterExit=
オプションはありません)。
「設定エラーが原因で起動時に終了した」などの状況と「500msのランタイム後にクラッシュした」などの状況を区別する方法がないため、通常は推奨されません。
Type=oneshot
とType=simple
の両方のユニット:
Type=oneshot
をKillMode=none
と一緒に使用できますが、あなたが何をしているのか知っている)。Systemdの観点からすると、Type=simple
は一種の火事であり、忘れられます。 Systemdは、ExecStart=
で定義されたプロセスをフォークし、プロセスが開始に失敗しても進行します。