为什么cron正在捕获Python';是否将事件记录为错误?
我有一个非常简单的测试设置,包括cron和一个使用为什么cron正在捕获Python';是否将事件记录为错误?,python,logging,cron,Python,Logging,Cron,我有一个非常简单的测试设置,包括cron和一个使用日志记录模块的Python脚本,当cron遇到日志记录事件时,它的行为异常 克朗塔布 ~/test.py ~/test.log cron运行后,日志将填充以下两条消息: Properly printed, to file Still running, though cron错误电子邮件 此外,在cron运行后,我会收到一个通知,通知我有新邮件: From tomcat6@local Thu May 23 16:35:01 2013 Date:
日志记录
模块的Python脚本,当cron遇到日志记录事件时,它的行为异常
克朗塔布
~/test.py
~/test.log
cron运行后,日志将填充以下两条消息:
Properly printed, to file
Still running, though
cron错误电子邮件
此外,在cron运行后,我会收到一个通知,通知我有新邮件:
From tomcat6@local Thu May 23 16:35:01 2013
Date: Thu, 23 May 2013 16:35:01 -0700
From: root@local (Cron Daemon)
To: tomcat6@local
Subject: Cron <tomcat6@local> ~/test.py >> ~/test.log
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/usr/local/tomcat6>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=tomcat6>
X-Cron-Env: <USER=tomcat6>
DEBUG:root:Does not get printed, get's e-mailed as an error
来自tomcat6@local2013年5月23日星期四16:35:01
日期:2013年5月23日星期四16:35:01-0700
发件人:root@local(Cron守护进程)
致:tomcat6@local
主题:Cron~/test.py>>~/test.log
内容类型:文本/纯文本;字符集=UTF-8
自动提交:自动生成
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
调试:root:未打印,get的电子邮件错误
看起来这不是一个明确的错误,否则最后的“仍在运行…”消息将不会打印到~/test.log
,对吗
为什么cron和或logging会这样做,是否有解决办法?由
basicConfig()
设置的默认配置将消息记录到stderr
,cron将任何输出解释为可发送电子邮件的stderr
文件句柄;毕竟,你不是在重定向它
见:
通过使用默认的格式化程序创建StreamHandler
,并将其添加到根记录器,对日志记录系统进行基本配置
及
如果指定了stream,实例将使用它记录输出;否则,将使用sys.stderr
解决方法是不设置流处理程序,或选择其他流,或选择要登录的文件名:
logging.basicConfig(level=logging.DEBUG, filename='/some/file/to/log/to')
或
通过登录到stdout
可以将日志信息写入与print()
相同的输出流
另一个解决方法是将stderr
重定向到stdout
:
* * * * * ~/test.py >> ~/test.log 2>&1
非常感谢你。2&>1对我不起作用,但2>&1起作用。@AkalankaWeerasooriya:啊,那确实是个打字错误,谢谢你指出这一点!
logging.basicConfig(level=logging.DEBUG, filename='/some/file/to/log/to')
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
* * * * * ~/test.py >> ~/test.log 2>&1