我正在使用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文件,这对我来说已经足够了。
答案 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