4

我已经用 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在程序中有一些语句我注释掉了,因为它们主要用于在编写过程中进行调试,但再想想,将这些语句用于调试信息,但指向/var/log/messages我可以使用的日志文件或其他日志文件,这对我很有用用tail -f /var/log/messages命令监控。

我该怎么做呢?谢谢。

4

2 回答 2

4

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

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

而已。确保您正在编辑 sudo 级别的 crontab,它可以通过sudo crontab -e.

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

记录输出也很容易。如果您的桌面上有一个名为 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"

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

于 2013-06-13T20:46:20.777 回答
0

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

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

  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 来完成。

于 2013-06-13T20:46:41.550 回答