来自Cron的Python脚本

时间:2013-06-13 20:34:10

标签: python cron

我已经用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或其他日志文件。

我该怎么做?感谢。

2 个答案:

答案 0 :(得分:4)

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

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

就是这样。确保您正在编辑sudo level crontab,可通过sudo crontab -e访问。

您的代码实际上每天凌晨2点运行脚本 - 技术上说“只要小时等于2就运行”。 * */n * * *表示“只要小时可被n整除”就会运行。可以在此处找到crontab上的GREAT资源: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

的最佳答案来完成。

答案 1 :(得分:0)

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

您可以通过两种方式重定向程序的输出。

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

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

    这将重定向stdout和stderr,附加到该日志文件。

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

    import sys
    sys.stdout = open("myLog.log", "w")
    sys.stderr = open("myLogErr.log", "w")
    print 'testing new stdout'
    
  3. 你也可能希望以另一个用户身份运行它,你可以用su来实现它。