2016-03-24 16 views
0

私はPython pickleを使ってオブジェクトを作成し、設定ファイルに保存しています。 cronジョブがなければ、スクリプトを実行してconfig.pklを生成することができます。しかし、一度私はcronジョブに入れ、私はconfig.pklを生成することができませんが、ログ "呼び出しgenerateConfig"が生成されます。ファイルには実行権限があります。cronジョブのpython pickle問題

以下は機能とcronジョブです。

def generateConfig(): 
     print "calling generateConfig" 
     configDict = {"test1":"value1","test2":"value2"} 
     output = open('config.pkl','wb') 
     pickle.dump(configDict, output) 
     output.close 

のcrontab:

00 05 * * * /user/bin/python ~/job/process.py 
+0

あなたのプラットフォームで 'python'が'/user/bin'にあることは間違いありませんか?ほとんどのLinuxでは、通常は '/ usr/bin'にあります。 cronjobが '' generate generate''を生成し、手動実行の残渣ではないことも絶対に確信していますか? – alvits

+0

こんにちは@alvits、申し訳ありません、このフォーラムの私のタイプミス。私はダブルチェックとcronジョブは/ usr/bin/python – Tammy

答えて

0

あなたがconfig.pklのパスを提供していないので、私の推測では、それを実行しているユーザのホームディレクトリにそのファイルをダンプするために起こっているのだろう。それがそこに置かれていない場合は、あなたのシステムを検索してみてください。エラーがログに記録されていない場合は、そのファイルがどこかにある可能性があります。

try/catchに例外を生成する可能性のあるもの(例えばファイルを書き込むもの)をラップし、明示的に処理またはログの問題を処理することをお勧めします。この場合、リソースを削除しようとすると、そのファイルハンドルを閉じることなくスクリプトが終了する可能性があります。 'with open(...) as output:'を使用するとよいでしょう。

+0

こんにちは@ kungphu、私はconfig.pklのパスをハードコードする必要がありますか?私はoutput = open( '〜/ job/config.pkl'、 'wb')を試しましたが、〜/ jobディレクトリにまだ見つかりませんでした – Tammy

+0

関連ユーザのホームディレクトリを検索しましたか? 'open( '/ tmp/config.pkl'、 'wb')'などのハードコーディングを始め、ファイルがtmpで表示されるかどうかを確認することをお勧めします。そうであれば、パス/設定上の問題の可能性が高いので、相対パスではなく絶対パスを使用する必要があります。そうでない場合は、何か他のものがうまくいかず、より多くの出力/エラーの捕捉が診断のためにあるかもしれません。 – kungphu