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

Start python script with cron and output print to a file

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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

1
2
3
4
5
6
#!/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脚本的第一行:

1
from __future__ import print_function

2)上次导入后打开日志文件,之后添加了一个测试打印:

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

如果我简单地从终端运行它,它就可以打印到文件中。但是如果我用cron调度它,它就不会写入文件。

更新2:最终用"logger"命令绊倒了一个解决方案。在shell脚本中,我必须添加"2>和1"(在shell脚本中,不是Elmovankielmo所描述的crontab)和"logger&;"。最终解决方案如下:

1
2
3
4
5
6
#!/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文件,这对我来说已经足够好了。


在crontab中输入:

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

它将把stdout重定向到这个文件。您可能还希望将stderr重定向(异常等),因此:

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

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

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