プロセスがまだ終了していない場合、systemdタイマーユニットは次の実行をスキップしますか?


18

systemdを使用して、5分ごとにコマンドを実行します。ただし、タスクの実行に5分以上かかることがあるというリスクがあります。その時点で、systemdはコマンドの2番目のインスタンスを開始しますか。つまり、2つのプロセスが実行されますか?

最初のプロセスが完了していない場合、2番目のプロセスを開始しないようにsystemdに指示することはできますか?そうでない場合、いくつかの良い回避策は何ですか?

注:答えが「これがデフォルトの動作です。文書化されていないだけです」と願っています。これが状況である場合、誰かがドキュメントに対してバグを報告する方法を教えてもらえますか?

注:Cronには、https://unix.stackexchange.com/a/173928/11244で説明されている同様の問題があります。systemdと同等のものを探しています。

回答:


27

これがデフォルトの(そして唯一の)動作です。明示的には文書化されていませんが、systemdの操作ロジックによって暗示されています。

systemd.timer(5)の読み取り:

タイマーファイルごとに、一致するユニットファイルが存在し、タイマーが経過したときにアクティブにするユニット記述する必要があります。

systemd(1)は、ユニット状態とコンセプト間の遷移の概念を説明しています。

ユニットは、「アクティブ」(開始、バインド、プラグイン、...、ユニットタイプに応じて、以下を参照)、または「非アクティブ」(停止、アンバインド、アンプラグド、...)、およびアクティブ化または非アクティブ化のプロセス、つまり2つの状態間(これらの状態は「アクティブ化」、「非アクティブ化」と呼ばれます)。

これは、タイマーのトリガーが一致ユニットの「アクティブ化」、つまり「アクティブ」状態への移行につながることを意味します。

マッチング部は、「活性化」の時点で既に「アクティブ」である場合(サービスユニットのために、この手段は、サービスユニットがない限り、「メインプロセスがまだ実行されている」Type=oneshotRemainAfterExit=true、何のアクションがないであろうことは明らかであるべきです)取られた。


「ワンショット」サービスを明確にできますか?私の見解で-serviceは、どのような状況下で、別のコピーを実行しないでください「ワンショット」(manページ:systemdに開始フォローアップの前にユニットをプロセスが終了している)
ギーマ

1
@Gima追加パラメーターのないワンショットユニットは、初期プロセスの実行中は「アクティブ化」と見なされ、終了すると「非アクティブ」になります。この時点で、別のトリガーがそのユニットを再びアクティブにすることができます。
intelfx

1
@Gima ...ただし、RemainAfterExit=true最初のプロセスが終了してもワンショットユニットは「アクティブ」のままであるため、管理者が明示的にユニットを非アクティブ化(停止)するか、ネガティブによってダウンしない限り、タイマーの後続のトリガーは無視されます依存関係。
intelfx

1
人々がこれを招待するので、私は担当者を得続けます。systemdがドキュメントを明確にしないことを願っています。
-TomOnTime

1
-これは今にsystemdドキュメントの一部であるNote that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case. freedesktop.org/software/systemd/man/systemd.timer.html
サム・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.