Python >> python チュートリアル >  >> Python Tag >> exec()

Crontab は Python スクリプトを実行していませんか?

と入力するとどうなるか

/home/me/project/myscript.py シェルに?

/usr/bin/python を明示的に使用できますか crontbb コマンドで?

test.db への絶対パスを使用できますか または cd 正しいディレクトリに移動してから、python スクリプトを実行しますか?

これは、Python でデバッグ ステートメントを使用し、データをログに記録するのに役立ちます。 Crontab はデバッグが非常に難しい場合があります。


インターネット上には多くの半分の答えがあるので、誰かの時間を節約するためにこれをキャプチャしようと思いました.

まず、cronjob は、これがどこで失敗しているかを伝えるのに不十分です。次のように stderr 出力をログ ファイルに送信することをお勧めします:

Crontab コマンド:

# m h  dom mon dow   command
* * * * * /path/to/your_file.sh >> out.txt  2>&1

これはユーザーとしてコマンドを実行している可能性が高いため、ログ ファイルのホーム ディレクトリを確認してください。このスクリプトは毎分実行されるため、デバッグに適しています。

次の問題は、おそらくパスに問題があることです...スクリプトがホームディレクトリから実行しようとしている可能性が高いためです。このスクリプトは、現在のディレクトリを設定し、それをファイルにエコーしてから、プログラムを実行します。

これを試してください:

スクリプト ファイル

#!/bin/sh
cd "$(dirname "$0")";
CWD="$(pwd)"
echo $CWD
python your_python_file.py

これにより、他の誰かのデバッグ時間が節約されることを願っています!!!


Python インタープリターが見つからないため、スクリプトが開始されない可能性があります。 Crontab 環境は、使用しているシェル環境とは大きく異なる場合があります。検索パスは大幅に異なる場合があります。また、crontab がスクリプトのみを開始することを期待している間に、Python インタープリターを明示的に開始してスクリプトをテストします。この行を Python スクリプトの先頭に置きます:

\#!/bin/env python

この行は、検索パスにある限り、インストールされているディレクトリに関係なく、インタープリターを見つけるのに役立ちます.