【问题标题】:Python script failing from crontabPython 脚本从 crontab 失败
【发布时间】:2014-07-10 20:39:52
【问题描述】:

我已经经历了多个线程,但我似乎仍然找不到我的问题。

我正在构建一个非常简单的 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

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

【问题讨论】:

  • 首先,你的shebang坏了。其次,您所说的“失败”/“不起作用”是什么意思?
  • 哦,那是一个错字。我仔细检查了我的脚本,那里没问题。是的,cron 工作并没有按应有的方式发布推文。据我所知,日志也没有显示任何错误。
  • PYTHONPATH 绝对应该/usr/bin/python,尽管我怀疑这是你的问题。
  • /var/log/cron.log 是否存在? cron 作业是否以有权写入该文件的用户身份运行?
  • 嗯,您目前只是将 STDOUT 重定向到日志 - 我不希望有任何回溯。尝试my_script.py &>> /var/log/cron.log 也将 STDERR 重定向到日志。

标签: python cron debian


【解决方案1】:

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

感谢所有建议 - 尤其是那些将错误写入正确日志文件的建议。

【讨论】:

    【解决方案2】:

    为了更好地调试,您可能需要重定向 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2011-10-03
      • 2013-02-06
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多