我已经用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
或其他日志文件。
我该怎么做?感谢。
答案 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)
你的第二段代码确实是正确的。
您可以通过两种方式重定向程序的输出。
标准Linux IO重定向 - http://www.tuxfiles.org/linuxhelp/iodirection.html
* 2 * * * python /home/pi/Desktop/myProg.py &>> /home/<user>/myProg.log
这将重定向stdout和stderr,附加到该日志文件。
更改Python脚本中的sys.stdout文件对象(可能还有stderr)
import sys
sys.stdout = open("myLog.log", "w")
sys.stderr = open("myLogErr.log", "w")
print 'testing new stdout'
你也可能希望以另一个用户身份运行它,你可以用su来实现它。