-1

Linux サーバーで Python スクリプトを実行し、ssh を使用してリモート ターミナルで実行すると正常に実行されます。しかし、crontab ファイルを使用してコマンドを実行すると、サーバーにインストールされている特定のファイルが見つかりません。cron を使用してスクリプトを実行すると、どのような違いがありますか? cron ファイルは、Python スクリプトと同じディレクトリにあります。postgresql インストール フォルダーにインストールされている「raster2pgsql」ローダーを使用しています。エラーメッセージは次のとおりです。

sh: raster2pgsql: not found

私のcronファイルの内容は次のとおりです。

*/2 * * * *  /usr/bin/env python /home/testexe/LST.py >> /home/testexe/LST.log 2>&1
4

1 に答える 1

4

Cron は、端末よりも「プレーンな」環境でコマンドを実行します。具体的には、 ~/.bashrc または ~/.bash_profile などで行われたセットアップが含まれない場合があり、多くの場合、$PATH (または場合によっては $PYTHONPATH) への追加が含まれます。

おそらく、次のように、cron ジョブの前にいくつかの環境変数を設定する必要があるだけです。

00 00 * * * PYTHONPATH=/foo/bar yourprog arg1...

編集:質問に追加されたコンテンツで、次のようなことを試してください:

*/2 * * * * PATH=/foo/bar /home/testexe/LST.py >> /home/testexe/LST.log 2>&1

/foo/bar をraster2pgsql、エラー メッセージに記載されているプログラムが含まれるディレクトリに置き換える必要があります。場所がわからない場合は、実行してみてくださいlocate raster2pgsql

そこにあったものを意図的に削除した/usr/bin/env pythonことに注意してください。これは、スクリプトの上部にある「シバン行」にあるはずです。これはファイルの最初の行である必要があり、次のようになります。

#!/usr/bin/env python

次に、chmod +x /home/testexe/LST.pyファイルを実行可能としてマークするだけで、cronまたはターミナルのいずれかで、明示的にpythonを外部から呼び出さずに実行できます。

于 2013-02-19T12:11:10.933 に答える