【问题标题】:Python script from Cron来自 Cron 的 Python 脚本
【发布时间】:2013-06-13 20:34:09
【问题描述】:

我已经用 Python 完成了一个程序,我打算每隔 n 小时从我的 RPi 运行它。这将是我第一次以这种方式运行这样的程序/脚本,我想知道在将脚本添加到我的 crontab 之前是否有任何我应该知道/已经写入脚本的内容?

我也不确定 crontab 中的这样一个条目的外观。我是否写了类似的东西:

* 2 * * * pi `python /home/pi/Desktop/myProg.py`

在命令周围加上反引号,还是从我将从 crontab 调用的 shell 脚本中启动 myProg.py?

* 2 * * * pi /home/pi/Desktop/launchMyProg.sh

另外,我在程序中有一些 print 语句,我注释掉了它们,因为它们主要用于在编写过程中进行调试,但再三考虑,将这些用于调试信息但指向@ 987654324@ 或其他我可以使用tail -f /var/log/messages 命令监控的日志文件。

我该怎么做呢?谢谢。

【问题讨论】:

  • 在 crontab 中,您可以像在 shell 中一样编写命令。唯一重要的区别:您可能有不同的环境变量。最常见的问题来自不同的 PATH 设置。

标签: python cron


【解决方案1】:

你在正确的轨道上。要每 n 小时触发一次 Python 脚本,请执行以下操作:

* */n * * * python /home/pi/Desktop/myProg.py

就是这样。确保您正在编辑通过sudo crontab -e 访问的 sudo 级别 crontab。

您的代码实际上会在每天凌晨 2 点运行脚本 - 从技术上讲,它是“在小时等于 2 时运行”。 * */n * * * 表示“只要小时能被 n 整除就运行”。可以在此处找到有关 crontab 的重要资源:Schedule tasks on Linux using crontab

记录输出也很容易。如果您的桌面上有一个名为 myLog.log 的日志文件,您可以将 >> /home/pi/Desktop/myLog.log 添加到 crontab 条目的末尾。这将使条目看起来像这样:

* */2 * * * python /home/pi/Desktop/myProg.py >> /home/pi/Desktop/myLog.log

编辑(感谢@Iamreck):输出到文件的另一个选项是使用 sys.stdout。这将实现相同的目标。为此,请将以下内容添加到您的 Python 脚本中:

import sys
sys.stdout = open("myLog.log","w")    
sys.stderr = open("myLogErr.log","w")   
print "stdout test"

执行此操作时,您还必须将工作目录更改为桌面,这可以通过this SO post 的最佳答案来完成

【讨论】:

  • 当且仅当您希望作业以root 运行时才使用sudo crontab -e。此外,如果您 chmod +x 脚本(并确保它在顶部有一个正确的 #! 行),您可以直接执行它,而不是将其作为参数传递给 python 命令。
  • 另外一点:我不使用crontab -e;很容易做出错误的编辑而无法回到以前的版本。我将我的 crontab 保存在源代码控制系统下的单独文件中,并将该文件提供给 crontab
【解决方案2】:

您的第二段代码确实是正确的。

您有两个选项来重定向程序的输出。

  1. 标准 Linux IO 重定向 - http://www.tuxfiles.org/linuxhelp/iodirection.html

    * 2 * * * python /home/pi/Desktop/myProg.py &>> /home/<user>/myProg.log
    

    这将重定向标准输出和标准错误,附加到该日志文件。

  2. 更改 Python 脚本中的 sys.stdout 文件对象(可能还包括 stderr)

    import sys
    sys.stdout = open("myLog.log", "w")
    sys.stderr = open("myLogErr.log", "w")
    print 'testing new stdout'
    

您可能还想以其他用户身份运行它,您可以使用 su 来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2018-10-08
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2015-03-16
    相关资源
    最近更新 更多