it-swarm-ja.com

Ubuntu:cronはどのようにジョブを実行しますか?

私はグーグルを通してこの質問への答えを見つけるのに苦労しています:

UbuntuのCRONはどのくらい精巧にジョブを実行しますか?

それは独自のプロセスでそれぞれの新しい仕事を生み出しますか?

2つのcronジョブがあるとします。

@reboot /some/really/slow/job
* * * * * /some/quick/job

これらのジョブは並行して実行されますか、それとも最初のジョブが完了するまで2番目のジョブをブロックしますか?

次に、Cronはリダイレクトに影響しますか?次のようなものを含むスクリプトがあるとします

rsync --verbose /from /to &>>rsynclog.log

CRONから呼び出されたときにログファイルは書き込まれますか?それともどこか別の場所に行き着くのでしょうか?

5
Martin Nielsen

この答えはubuntuのためのものです。他のLinux/UNIXオペレーティングシステムは若干異なる場合があります。

毎分、cronデーモンはすべてのcrontabファイルを読み取り、それらをメモリにロードします。実行されるcronエントリごとに(crontab時間フィールドによって決定されます)、cronはそれ自体のコピーをフォークします。

次に、フォークされたcron子プロセスが新しいシェル(通常は/ bin/shですが、これはオーバーライドできます)を実行して、crontabコマンドを実行します。 cron自体は、ジョブを管理する子プロセスのみをフォークします。したがって、cronエントリは同時に実行されます。たとえば、1つのジョブに1時間かかる場合でも、他のcronジョブの実行には影響しません。

リダイレクトshould通常どおりに機能し、出力ファイルはcrontabを所有するユーザーの$ HOMEディレクトリに書き込まれます。 PATHおよびHOME設定の問題を回避するために、コマンドおよびリダイレクトされたファイルへのフルパスを提供する価値がある場合があります。

6
suspectus