systemdを使用して5分ごとにコマンドを実行したいと思います。ただし、ジョブの実行時間が5分を超える可能性があります。その時点で、systemdはコマンドの2番目のインスタンスを起動しますか?つまり、2つのプロセスを実行しますか?
最初のプロセスがまだ完了していない場合は、systemdに2番目のプロセスを開始しないように指示できますか?そうでなければ、良い解決策は何ですか?
注:「これはデフォルトの動作です。文書化されていません」と答えたいと思います。それでは、誰かが文書にバグを報告する方法を教えてもらえますか?
注:Cronにも同様の問題があります。https://unix.stackexchange.com/a/173928/11244。私はsystemdと同等のものを探しています。
答え1
これが基本(唯一の)動作です。明示的に文書化されていませんが、systemdのオペレーションロジックによって暗示されます。
systemd.timer(5)内容は次のとおりです。
各タイマーファイルには、その単位を記述する一致する単位ファイルが必要です。タイマーの有効期限が切れると有効。
システム(1)次に、単位状態の概念とその間の遷移について説明する。
デバイスは、「アクティブ」(開始済み、バインド済み、接続済み...を意味し、デバイスの種類に応じて以下を参照)または「非アクティブ」(停止済み、バインド解除済み、接続解除済み...を意味)のいずれかです。有効または無効中つまり、2つの状態の間(これらの状態を「アクティブ化」と「非アクティブ化」と呼びます)です。
これにより、タイマーの動作により、一致するデバイスが「アクティブ」になります。つまり、「アクティブ」状態に切り替わります。
一致するユニットが「アクティブ」になっていてすでに「アクティブ」である場合(サービスユニットの場合、これはサービスユニットに存在しない場合は「Type=oneshot
メインプロセスがまだ実行中」であることを意味しますRemainAfterExit=true
)、明らかに何もしません。
答え2
今テストしてみると、デバイスが起動しているようです。まもなく最後の実行が完了した後、以前の実行がまだ完了していない間にデバイスが起動するようにスケジュールされている場合。私はその実行を無視し、次のタイマー呼び出しを待ちたいです。