2012-05-07 3 views
1

Моя проблема заключается в том, что cronjob работает нормально, но не правильно выполняет код в файлах .sh, см. Ниже подробную информацию.Cronjob - Running Scripts и Python

I типа кронтаб -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, но фактически не выполняет код из операторов импорта ... Любые идеи?

отметить также, что keyword_sync и target_milestone_sync расположены в том же каталоге, uber_sync, а именно/дома/пользователя/путь

Спасибо за любую помощь.

+0

так, что получилось в '/ home/user/cronlog.log'? любой стек? - О, и не зная, что делает 'sync()' s, это будет трудно сказать, что здесь может быть неправильным. – 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/path через python uber_sync.py, и он работал, потому что ваши модули находились в текущем каталоге. Но когда его выполнить в some/other/dir через python /home/user/path/uber_sync.py, текущий каталог станет some/other/dir, а ваши модули не найдены.

+0

Я сегодня вечером зажгу cron и посмотрю, исправляет ли это, это то, что я подозревал в этой проблеме, поэтому, надеюсь, это сработает! Спасибо –

+0

Другое примечание: мне также пришлось сменить сценарий резервного копирования на абсолютные пути. –