2012-05-07 11 views
1

私の問題は、cronjobが正常に動作しているようですが、.shファイル内でコードを正しく実行していないことです。Cronjob - 実行中のスクリプトとPython

私はcronを起動するには、のcrontab -eを入力します。そのファイルには を:

30 08 * * 1-5 /home/user/path/backup.sh 
45 08 * * 1-5 /home/user/path/runscript.sh >> /home/user/cronlog.log 2>&1 

backup.sh:

#!/bin/sh 
if [ -e "NEW_BACKUP.sql.gz" ] 
then 
    mv "NEW_BACKUP.sql.gz" "OLD_BACKUP.sql.gz" 
fi 
mysqldump -u username -ppassword db --max_allowed_packet=99M | gzip -9c > NEW_BACKUP.sql.gz 

runscript.sh:

#!/bin/sh 
python /home/user/path/uber_sync.py 

uber_sync .py:

import keyword_sync 
import target_milestone_sync 
print "Starting Sync" 
keyword_sync.sync() 
print "Keyword Synced" 
target_milestone_sync.sync() 
print "Milestone Synced" 
print "Finished Sync" 

問題は、uber_syncでprintステートメントを実行しているようですが、実際にはimportステートメントからコードを実行していないようです...任意のアイデアですか?

また、すなわち/ホーム/ユーザー/パス、そのkeyword_syncとtarget_milestone_syncがuber_syncと同じディレクトリに配置されている注意

任意の助けてくれてありがとう。

+0

だから、 '/ home/user/cronlog.log'で終わるのは何ですか?任意のスタックトレース? - ああ、 'sync()'が何をするのか分からずに、ここで何がうまくいかないのかを知るのは難しいでしょう。 – mata

+0

PATHを確認します。 – Daenyth

答えて

1

あなたのインポートステートメントは、Pythonがあなたのモジュールを見つけることができないので失敗します。 (uber_sync.pyするためにこれを追加)検索パスにそれらにそれらを追加して、あなたのモジュールをインポートし、このような:

import sys 
sys.path.append("/home/user/path") 
import keyword_sync 
import target_milestone_sync 

Pythonはで、カレントディレクトリ(コードで実行されたディレクトリ)内のモジュールを探します$PYTHONPATH環境変数と設定ファイル。これはすべてsys.pathで終わり、リストオブジェクトのように編集できます。特定のモジュールがインポートされるかどうかについての詳細を知りたい場合は、標準モジュールimpを調べることをお勧めします。

/home/user/pathpython uber_sync.pyでコードをテストしたところ、あなたのモジュールが現在のディレクトリに存在していたため、機能しました。しかしsome/other/dirpython /home/user/path/uber_sync.pyを実行すると現在のディレクトリはsome/other/dirになり、モジュールが見つかりません。

+0

私は今夜もう一度cronを実行し、これが修正されているかどうかを確認します。問題があると思われるので、これがうまくいけばうまくいきます!ありがとうございました –

+0

別の注意:私はまた絶対パスにもバックアップスクリプトを変更する必要がありました。 –

関連する問題