使用cron启动Python脚本并将输出打印到文件
我正在用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:最后我找到了一种用“logger”命令的解决办法。在我的shell脚本里,我需要添加“2>&1”(在shell脚本里,而不是像ElmoVanKielmo描述的那样在crontab里),然后加上“ | logger &”。最终的解决方案看起来是这样的:
#!/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 个回答
18
在你的定时任务设置中放入这个:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt
这样做会把正常输出的内容保存到这个文件里。
你可能还想把错误信息也保存起来(比如异常等),所以可以这样做:
*/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