1

cron ジョブの設定を手伝ってくれてありがとう。crontab は本当に私にとって宝の山です。

残念ながら、私には問題があり、それが何であるかはまったくわかりません...基本的に、隣のジョブが開始している間、ジョブは開始されません。説明します


これは私の crontabs ジョブ リストです。

*/10 * * * * python /webapps/foo/manage.py fetch_articles

*/10 * * * * python /webapps/bar/manage.py fetch_books

それらをそのままファイルに書き込み、 crontab /path/to/file を使用して保存しました。

crontab -l で確認すると、ジョブがそこにあります。


奇妙なことに、これらのうちの 1 つは通常 10 分ごとに実行されますが、もう 1 つは実行されません。コマンドを手動で入力してみましたが、問題なく正常に動作します。


誰にも提案はありますか?

助けていただければ幸いです。ありがとうございます。


アップデート:

システムログファイルを調べたところ、次のことがわかりました。

3 月 5 日 02:50:01 localhost CRON[21652]: (ルート) CMD (python /webapps/foo/manage.py fetch_books)

これは、crontab が正常にジョブを呼び出していることを意味しますか?


返信ありがとうございます。


修正しました!皆さん本当にありがとうございました!!

問題は、スクリプトが静かに失敗したことでした。スクリプトが呼び出された場所が原因で PYTHON_PATH が変更されたためだと思います...私は完全に確信しています。

4

3 に答える 3

6

Cron は常に、あなたが考えているものとは異なる環境で実行されます :-)

私は常にcronジョブを次のように設定しています:

*/10 * * * * ( date ; python /webapps/foo/manage.py fetch_articles ) >>/tmp/fetch.out 2>&1

私が見ることができる何かがログに記録されていることを確認します。

これにより、問題が次のいずれかに絞り込まれます。

  • 一時ファイルが表示されない場合は cron。また
  • 表示される場合は、スクリプト。

後者の場合は、デバッグできる出力が得られることを願っています。そうでない場合は、そこに出力を入れます。

それを行う1つの方法は、次のようにすることです。

set -x

これにより、実行前にすべての行が出力されます。私のスクリプトはすべて開始する傾向があります。

#!/bin/bash
#set -x

そのため、デバッグ中にその 2 行目のコメントを外すことができます。

于 2010-03-05T02:51:39.360 に答える
4

crontab マンページから:

バグ cron では crontab の各エントリが改行文字で終わる必要がありますが、crontab コマンドも cron デーモンもこのエラーを検出しません。代わりに、crontab が正常にロードされているように見えます。ただし、コマンドは実行されません。 最良の選択は、crontab の最後に空白行があることを確認することです。

(私の強調)。

于 2010-03-05T02:47:05.590 に答える
1

~unutbu の答えは、実行されていない 2 番目のジョブであればおそらく正しいと思います。

ただし/webapps/bar/manage.py、ネットワークソケット/一時ファイルなどのリソースへの排他的アクセスが必要かどうかも確認する必要があります。同時に2つのプロセスを開始しているため、競合状態が発生している可能性があります。

于 2010-03-05T02:58:08.737 に答える