2017-10-13 8 views
0

私は、同じディレクトリからpythonスクリプトを呼び出すシェルスクリプトcronを持っていますが、このcronが実行されているとき、私はPythonスクリプトから期待される出力を得ていません。スクリプトの出力は期待どおりです。シェルスクリプトからPythonスクリプトを呼び出すcron

私は は/ usr/binに/ Pythonのroom_wise.py

のようなPythonスクリプト・パスを提供し、同様にシェルスクリプト内のすべてのシェルのparamsを与えられたが、それでも私のPythonスクリプトは、シェルスクリプトのcronを使用して呼び出されませんしています。

誰でも私を助けることができますか?

+1

あなたは '/ usr/bin/python/path/to/room_wise.py'を試したことがありますか? – Nepho

+0

はい@ネフォ、私は両方のことを試しました – Sid

+0

''どのpython''の出力は '/ usr/bin/python'の出力は期待通りですか? – Nepho

答えて

0

cronジョブの大きな問題は、絶対ディレクトリと相対ディレクトリの場所です。最初に相対パスを分割する必要があります。

#!/usr/bin/env bash 
dirName=`dirname $0` 
baseName=`basename $0` 
arg1=$1 
arg2=$2 
cd ${dirName} && python ./room_wise.py arg1 arg2 

その後、ユーザーのcronジョブにアイテムを追加し、以下を追加するのcrontab -eを使用します。

PATH=/usr/bin:/bin:/sbin 
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1 

これは時々に問題があることができますので、あなたは、私がPATHを追加したことがわかります特定のオペレーティングシステムのディストリビューション。また、スクリプトはbashスクリプトと同じディレクトリに存在するか、$ 1としてdirnameを含むようにbashスクリプトを変更した場合は、引数としてディレクトリの場所を渡すことができます。

また、すべての出力をログファイルに出力していることがわかります。これは本当に良いアイデアです。何かがうまくいかない場合、プロセスをデバッグすることが時には非常に困難なことがあります。

+0

です。まだ実行していない場合は、#!/ usr/bin/env pythonをpythonスクリプトの先頭に追加してください。これは、cronのbashスクリプトからソフトウェアを実行するときに重要になる重要な側面です。 –

+0

'2>&1'という行はパイプの最後で何をしますか? –

関連する問題