2017-02-14 9 views
0

У меня есть следующий кронтаб:Crontab не может запустить скрипт на Python, поскольку файл питона есть третья сторона Lib

22 * * * * cd /home/work/ui && /home/work/.jumbo/bin/python test.py >> result.log & 

И test.py имеют следующие коды:

#!/home/work/.jumbo/bin/python 
#coding=utf-8 

import datetime 
import hashlib 
import logging 
import os 
import Queue 
import signal 
import sys 
import threading 
import time 
import traceback 

#注释 

if __name__ == "__main__": 
    print 'Begin' 
    print 'End' 

OK, коды может работать правильно, но я добавлю import requests, после этого он не будет работать правильно, я думаю, что он не может найти путь к lib.

Итак, я использую sys.path.append, но он все еще не может работать правильно.

#!/home/work/.jumbo/bin/python 
#coding=utf-8 

import datetime 
import hashlib 
import logging 
import os 
import Queue 
import signal 
import sys 
import threading 
import time 
import traceback 

sys.path.append('/home/work/.jumbo/lib/python2.7/site-packages/requests') 
print sys.path 

import requests 

#注释 

if __name__ == "__main__": 
    print 'Begin' 
    print 'End' 

А потом, как мне это?

BTW, я могу запустить его прямо по команде ОС. Так что мой код в порядке.

ответ

3

Работы Cron начинаются с очень ограниченного набора переменных окружения. Вероятно, есть одна или несколько переменных окружения, которые вы получаете из вашего ~/.profile или ~/.login (или тому подобного).

Попробуйте переместить всю работу в сценарий и вызвать его так:

22 * * * * /home/work/ui/mycronjob 

В mycronjob вы бы что-то вроде этого:

#!/bin/bash 
source ~/.bash_profile 
cd /home/work/ui && /home/work/.jumbo/bin/python test.py >> result.log 

Это предполагает, что ваш $ SHELL является Баш и у вас есть файл ~/.bash_profile. Если у вас есть другая оболочка или другой файл инициализации (~/.login, ~/.profile и т. Д.), Используйте это вместо этого.

+0

Спасибо, Ты прав. – thinkerou

0

первый совет: вы можете перенаправить поток ошибок, а также стандартный вывод в файл журнала в кронтаб, как это:

Я думаю, что путь, который будет добавлен должен быть

sys.path.append('/home/work/.jumbo/lib/python2.7/site-packages') 
+0

Спасибо, я использую 'source' и могу работать нормально – thinkerou

Смежные вопросы