我正在使用cron启动一个python脚本,如下所示:
#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &
Run Code Online (Sandbox Code Playgroud)
我的脚本有几个打印用于调试.我想将这些消息打印到文件中,例如/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
Run Code Online (Sandbox Code Playgroud)
如何将消息打印到此文件?我正在使用python 2.7
更新:使用以下代码编辑我的代码:
1)将其添加为我的python脚本的第一行:
from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)
2)在上次导入后打开日志文件,然后在其后添加测试打印:
log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)
Run Code Online (Sandbox Code Playgroud)
如果我简单地从终端运行它,它打印到文件很好.但是如果我用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
Run Code Online (Sandbox Code Playgroud)
它将任何打印输出到/ var/log/syslog文件,这对我来说已经足够了.
Elm*_*lmo 14
在你的crontab中放这个:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt
Run Code Online (Sandbox Code Playgroud)
它会将stdout重定向到此文件.
您可能还希望重定向stderr(例外等),因此:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>> /home/ubuntu/errors.txt
Run Code Online (Sandbox Code Playgroud)
或者你可以将它们全部放在一个文件中:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10141 次 |
| 最近记录: |