用cron启动python脚本并输出print到文件

时间:2014-07-25 14:10:41

标签: python cron

我正在使用cron启动python脚本,如下所示:

#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &

我的脚本有几个用于调试的打印件。我想将这些消息打印到文件中,例如/home/ubuntu/Logs.txt

我的脚本还会检查python调用是否已经在运行,因此它不会再次启动它:

#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)

if [ $lines -ne 2 ]; then
    python python_script.py &
fi

如何将邮件打印到此文件?我使用的是python 2.7


更新:使用以下代码编辑我的代码:

1)将其添加为我的python脚本的第一行:

from __future__ import print_function

2)在上次导入后打开日志文件,然后立即添加测试打印:

log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)

如果我从终端轻松运行它,它会打印到文件。但如果我用cron安排它,它就不会写入文件。


更新2:结束了与"记录器"的解决方案的绊脚石命令。在我的shell脚本中,我必须添加" 2>& 1" (在shell脚本中,不是ElmoVanKielmo描述的crontab)和" |记录器&"。最终解决方案如下所示:

#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)

if [ $lines -ne 2 ]; then
    python python_script.py 2>&1 | logger &
fi

并将任何打印输出到/ var / log / syslog文件,这对我来说已经足够了。

1 个答案:

答案 0 :(得分:14)

在你的crontab中输入:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt

它会将stdout重定向到此文件 您可能还希望重定向stderr(例外等),所以:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>> /home/ubuntu/errors.txt

或者您可以将它们全部放在一个文件中:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1