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

时间:2017-02-14 03:34:14

标签: python crontab

我有以下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'

然后,我该怎么做?

BTW,我可以在OS命令上运行它。所以我的代码没问题。

2 个答案:

答案 0 :(得分: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而且你有一个〜/ .bash_profile。 如果您有其他一些shell或其他init文件(〜/ .login,〜/ .profile等),请改用它。

答案 1 :(得分:0)

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">

</div>

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

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