同じ実行時間のcronジョブ


8

同時に実行するように設定された複数のcronジョブがあるとします。それらは並列に実行されますか、それとも逐次実行されますか?

(私の場合は、/ etc / cron.d / mycronjobs内にcronjobsを配置したDebian squeezeです)。

回答:


7

完全を期すために、たとえば/etc/cron.{hourly,daily,weekly,monthly}のジョブは順次実行されます。run-partsスクリプトは、このディレクトリ内のすべてのファイルをループします。

02 4 * * * root run-parts /etc/cron.daily

そのため、これを命名規則と組み合わせて(/etc/init.d/rc*.dたとえば、の番号付けに似ています)、ジョブが確実に順次実行されるようにすることができます。


同じファイル内に複数のcronジョブがあり、同時に実行するように設定されている場合はどうなりますか?
ガブリエレ

「同じファイル内」の意味がわかりません。しかし、同じ時刻指定の行がいくつかあることを意味する場合(0 * * * *以前に投稿したような)、他のユーザーが投稿したように、それらが実行される順序は保証されません。マルチコアシステムで並列に実行される場合があります。 AFAIKが実行する順序は、毎日異なる場合さえあります。私がrun-partsと組み合わせて述べた命名規則、または実際のバックアップスクリプトを呼び出すマスタースクリプトの使用は、スクリプトが特定の順序で実行されることを保証する唯一の方法です。
ブラム2012年

では、スクリプトが次々と実行されることを確認する必要があるので、cronジョブによってトリガーされる "マスタースクリプト"に移動し、メインスクリプト内からスクリプトを呼び出します。
ガブリエレ

5

cronにリストされているタスクは、通常のプロセスと同様に、並行して実行されます。どちらが最初に開始するかを確認する方法はなく、タスクBが開始する前にタスクAが完了したことをcronで確認する方法はありません。


1
タスクBを開始する前にタスクAが完了していることを確認するには、それらを同じ行にリストし、セミコロンで区切ります。
ニコラス

これは、タスクAが正常に完了したことを意味するものではありません。おそらく&&を使用することもできますが、このようなことは、呼び出されるスクリプトによって実行する必要があります。
Sirch

bashシェルがサポートする任意のオペランドを使用できます。&&、||、または;の使用 私の経験では、cronでの作業が一般的です。
ニコラス

2

Cronは継続的に実行されるデーモン(サービス)です。ただし、1分に1回はcrontabを読み取ります。

ジョブが実行される正確な順序は、システムのcrondの実装によって異なります。

一部のディストリビューションが/etc/cron.d/内に置く緩いファイルは、通常のcrontab(5)構文に従うため、cronタイマー設定がスキャンされます。

個々のジョブが実行される順序は、ジョブに設定したスケジュールによって明らかに異なります。


スケジュールが次のように設定されている場合:---- 0 * * * * root sh / var / opt / backup_scripts / backup1-0 * * * * root sh / var / opt / backup_scripts / backup2 ----それらは逐次的に実行します。つまり、backup1、そして終了時にbackup2?
ガブリエレ

ジョブが実行される正確な順序は、システムのcrondの実装によって異なります。詳細はcronをご覧ください。
アダプタ

man cronはそれについて何も述べていません(少なくともDebianでは)。
ガブリエレ

2

それらは並行して実行されます。以下の方法を使用して、プロセスを順次実行できます。

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.