Crontab 无法运行 Python 脚本,因为 python 文件具有第三方库



我有以下crontab:

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'

好的,代码可以正常运行,但是我添加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'

然后,我该怎么做?

顺便说一句,我可以直接在操作系统命令上运行它。所以我的代码没问题。

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,你有一个~/.bash_profile。如果你有其他的shell或其他init文件(~/.login,~/.profile等(,请使用它。

首先是一个提示:您可以将 stderr 和 stdout 重定向到 crontab 中的日志文件,如下所示:

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

我认为要附加的路径应该是

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

最新更新