使用cron启动Python脚本并将输出打印到文件

9 投票
1 回答
19271 浏览
提问于 2025-04-18 14:45

我正在用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

撰写回答