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 |