使用 cron 启动 python 脚本并将打印输出到文件 [英] Start python script with cron and output print to a file
问题描述
我正在使用 cron 启动一个 python 脚本,如下所示:
I'm starting a python script using cron, like this:
#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &
我的脚本有几个用于调试的打印件.我想将这些消息打印到一个文件中,例如/home/ubuntu/Logs.txt
And my script has several prints for debugging. I want to print those messages into a file, for example /home/ubuntu/Logs.txt
我的脚本还会检查 python 调用是否已经在运行,因此它不会再次启动它:
My script also check if the python call is already running so it won't start it again:
#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)
if [ $lines -ne 2 ]; then
python python_script.py &
fi
如何将我的消息打印到此文件中?我正在使用 python 2.7
How do I print my messages to this file? I'm using python 2.7
更新:使用以下内容编辑我的代码:
Update: Edited my code with the following:
1) 将此添加为我的 python 脚本的第一行:
1) Added this as the first line of my python script:
from __future__ import print_function
2) 在上次导入后打开日志文件,然后添加测试打印:
2) Opened the log file after the last import, and right after that added a test print:
log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)
如果我简单地从终端运行它,它会很好地打印到文件中.但是如果我用 cron 安排它,它就不会写入文件.
If I simple run it from the terminal, it prints to the file fine. But if I schedule it with cron it doesn't write to the file.
更新 2:最终在使用记录器"命令的解决方案上磕磕绊绊.在我的 shell 脚本中,我必须添加2>&1"(在 shell 脚本中,而不是 ElmoVanKielmo 描述的 crontab)和| logger &".最终解决方案如下所示:
Update 2: Ended up stumbling on a solution with "logger" command. On my shell script I had to add "2>&1" (in the shell script, not crontab as described by ElmoVanKielmo) and " | logger &". Final solution looks like this:
#!/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 文件,这对我来说已经足够了.
and it outputs any prints to /var/log/syslog file, which is good enough for me.
推荐答案
在你的 crontab 中输入:
In your crontab put this:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt
它会将标准输出重定向到这个文件.
您可能还希望重定向 stderr(异常等),因此:
It will redirect stdout to this file.
You might also want to have stderr redirected (exceptions etc.), so:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>> /home/ubuntu/errors.txt
或者您可以将它们全部放在一个文件中:
Or you can have them all in one file:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1
这篇关于使用 cron 启动 python 脚本并将打印输出到文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!