Python脚本从crontab失败

时间:2014-07-10 20:39:53

标签: python cron debian

我经历过多个主题,但我似乎无法找到问题。

我正在构建一个非常简单的Twitter机器人,我想用Raspberry Pi的一个cron作业每小时开一次。这是我的crontab:

PYTHONPATH=/usr/bin/python
MAILTO=*myemail*
00 * * * * /home/username/directory/my_script.py >> /var/log/cron.log

然后是剧本:

#! /usr/bin/env python
import sys
from twython import Twython, TwythonError
from pymarkovchain import MarkovChain

#TWITTER ACCESS
apiKey = KEY
apiSecret = SECRET
accessToken = TOKEN
accessKey = KEY

#text to pull
text = open('/home/username/directory/text.txt').read()

#Generate database and frequency table
mc = MarkovChain('/home/username/directory/markov')
mc.generateDatabase(text)
tweet = mc.generateString()

api = Twython(apiKey,apiSecret,accessToken,accessKey)

try:
    api.update_status(status=tweet)
except TwythonError as e:
    print e

我检查的第一件事是我所有引用的文件,以确保它们是绝对引用。然后,我检查以确保我的文件路径是正确的。我真的很难过。使用完整路径从命令行运行脚本按预期工作。任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:2)

在尝试了上面的建议并阅读了无数文章之后,我了解到cron必须以root身份运行,而不是以用户身份运行。我检查了日志,发现调用脚本的用户是文件的所有者,而不是root用户。因此,运行chmod a+x my_script.py会照顾它。

感谢所有建议 - 特别是那些将错误发送到正确的日志文件的建议。

答案 1 :(得分:0)

为了更好地调试,您可能需要重定向stderr:

00 * * * * /home/username/directory/my_script.py >> /tmp/cron.log 2>&1
# or
00 * * * * /home/username/directory/my_script.py >> /tmp/cron.log 2>/tmp/cron-error.log

(我还改变了那里的路径,以确保你的cron用户有权写出输出。)

您可以尝试的另一件事是在cron中使用Python运行脚本:

00 * * * * python /home/username/directory/my_script.py >> /tmp/cron.log 2>&1