crontab 不能 运行 Python 脚本 因为 python 文件有第三方库
Crontab can not run Python script because the python file have third-party lib
我有以下 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'
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'
然后,我该怎么办?
顺便说一句,我可以在 OS 命令上 运行 它。 所以我的代码没问题。
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 或其他初始文件(~/.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')
我有以下 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'
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'
然后,我该怎么办?
顺便说一句,我可以在 OS 命令上 运行 它。 所以我的代码没问题。
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 或其他初始文件(~/.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')