web-dev-qa-db-ja.com

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

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

_@daily job1
@daily job2
_

私はそれらが次々に実行されることを想定していますが、Webまたはこれらのマンページのいずれからも答えを見つけることができませんでした:cron(1)crontab(1)crontab(5)

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

シェルスクリプトを1つ作成して順番に起動できることはわかっています。cronがどのように機能するのか知りたいだけです(テストデータを収集したり、ソースコードを読んだりするのが面倒です)。

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

22
Adam Monsen

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

私はこれを全面的に信頼しません。 31コアがアイドル状態で実行されているこれらの32コアCPUを利用するために、誰かがcronがジョブを並行して実行することを決定する可能性があります。これは、cronソースで発生したこの20年前のToDo項目を実装するときに行われる可能性があります。

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

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

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

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

0 0 * * *

真夜中に実行するように言います。この種の2つのラインは、どちらが最初に実行されるかについての保証はありませんが、どちらもできるだけ真夜中に開始されると予想します。彼のコメントにおけるjw013の提案に同意します:

仕様が十分に規定されていないということは、通常は実装に任されていることを意味し、通常はそのような動作に依存しないことが最善です。シーケンスが重要なジョブのシーケンスを個別のcrontabエントリとしてではなく、独自のスクリプトに配置する方が、おそらくよりクリーンで適切に編成されています。

5
Tom Barron

@Gilesは、インポート時に単一のスクリプトを使用して、順番に実行することについてコメントしています。

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

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

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

0
BillThor