複数の@daily crontabエントリは順番に順番に処理されますか?


22

毎日2つのジョブを、指定した順序どおりに、連続して連続して実行したいと考えています。このcrontabは、私が望むことを確実に行いますか?

@daily job1
@daily job2

私は、彼らが次々に実行すると仮定していますが、私は、Webを検索することにより、またはこれらのmanページのいずれかから答えを見つけることができませんでした:cron(1)crontab(1)crontab(5)

cronがスケジュールされ@dailyたものを並行して、または予測できない順序で実行する場合、上記のcrontabは明らかに私が望むことをしません。

私は単純に1つのシェルスクリプトを作成してそれらを順番に起動できることを知っています.cronがどのように機能するのか興味があります(そしてテストデータを収集したりソースコードを読むのが面倒です)。

Cronはcronパッケージによって提供されます。OSはUbuntu 10.04 LTS(サーバー)です。


どのcronがcronパッケージによって提供されているかを知っていますか?私が知っているほとんどすべてのcronデーモンは、これを順番に、そして同期的に処理します。通常、最初に各ファイルをアルファベット順に解析します(ただし、実行間の時間の長さによって昇順で解析するものもあります)。
クリスダウン

5
それが指定不足であるという事実は、通常、実装に任せられることを意味し、通常、そのような動作に依存しないことが最善です。シーケンスが個別のcrontabエントリとしてではなく、独自のスクリプトで重要な場所にあるジョブのシーケンスを配置する方が、おそらくより整理されて整理されています。
jw013

@ChrisDown:Vixie Cron、私は思う。packages.ubuntu.com/lucid/cron
アダムモンセン

1
本当に順番に実行したい場合は、1分後に実行することをお勧めします。
ケビン

@ jw013とケビン:同意したが、それは私の質問ではない。
アダムモンセン

回答:


26

ソース(Debian squeeze、同じバージョンだと思います)をひと目見ると、指定されたファイル内のエントリのように見え、同じ時間に順番に実行されます。この目的のために、@daily0 0 * * *(実際には同一であり、@daily同一であり0 0 * * *、このcronの中で)。

私はこれを全面的に当てにしないでしょう。いつか誰かがcronを並行してジョブを実行することを決定し、31コアがアイドル状態で実行されているこれらの32コアCPUを利用する可能性があります。これは、cronソースで検出された20年前のtodoアイテムを実装するときに実行される可能性があります。

これらはすべてフラグを立てて負荷を制限する必要があります。つまり、@ hourlyが「0 * * * *」を意味する代わりに、「毎時間の前に近いが、システムの負荷が低くなるまで」ではないことを意味する必要があります。(…)(vix、jan90)

@daily job1; job2ここに書くのはとても簡単です。ジョブを順番に実行することが重要な場合は、作成した内容の直接的な結果にします。

さらに、順序を明示的にすることで、将来の管理者が重要ではないと考えて行を並べ替えるリスクがなくなります。


5

http://ss64.com/osx/crontab.html(および他の参照)は、@ dailyは

0 0 * * *

真夜中に実行するように言います。私はこの種の2行が両方とも可能な限り真夜中近くに起動されることを期待しますが、どちらが最初に実行されるかについては保証しません。jw013のコメントでの提案に同意します。

それが指定不足であるという事実は、通常、実装に任せられることを意味し、通常、そのような動作に依存しないことが最善です。シーケンスが個別のcrontabエントリとしてではなく、独自のスクリプトで重要な場所にあるジョブのシーケンスを配置する方が、おそらくより整理されて整理されています。


これは役立ちます、ありがとう。@ jw013の提案は有効ですが、それは私が尋ねた質問ではありません。確かに実装固有のものであるため、最終的な答えについては実際のソースを参照する必要があると思います。
アダムモンセン

0

@Gilesは、適切な順序で物事を実行するためにインポートするときに単一のスクリプトを使用することについてコメントしています。

cron.dailyファイルは実行時間を指定しません。私が経験したのは、それらが連続して実行されることです。これは、ラップトップまたは他のシステムで実行される可能性のある多くのバックグラウンドジョブとして理にかなっています

時間を指定すると、現在の分にスケジュールされているすべてのジョブが実行されます。異なる時間を使用することをお勧めします。

相互に排他的なジョブがある場合、ロックファイルを使用して他のジョブが実行されているかどうかを判断するのが一般的です。


@dailyはとは少し異なり/etc/cron.dailyます。前者は、crontabで使用するための代替構文です。もご覧くださいrun-parts。私のシステムはrun-partsでプログラムを実行するために使用します/etc/cron.dailyrun-parts(8)マンページによると、「ファイルは名前の字句順で実行されます...」。
アダムモンセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.