Python的logging模块在crontab中运行时没有输出

3

我有一个可执行的a.py文件,在CLI中运行正常。但是在我编写了一个a.sh脚本/root/a.py >> /root/a.log并启动了一个crontab * * * * * /bin/sh /root/a.sh之后,它工作得很好,只是日志文件没有输出。
a.py的日志记录部分配置如下:

DATE_FORMAT = '%a, %d %b %Y %H:%M:%S'
LOG_FILE = 'log'
RESULT_LOG_FILE = 'result.log'
LOG_FORMAT = '[%(asctime)s] [%(filename)s:%(lineno)d] [%(levelname)s] [%(threadName)s] [%(process)d] %(message)s'
logging.basicConfig(format=LOG_FORMAT, datefmt=DATE_FORMAT, level=logging.INFO, filename=LOG_FILE)  
logging.error('ERROR')  

我尝试在a.sh中/root/a.py的前面添加/usr/local/bin/python,但没有起作用。我不知道为什么会这样。


你查看了哪个日志文件?是result.log还是a.log?根据你的代码,日志文件应该是result.log,而a.log应该为空。 - Srgrn
两者都没有输出日志。在上面列出的代码中,应该是“log”文件,我在logging.basicConfig(filename=LOG_FILE)中进行了配置。 - J.Wang
我的意思是'log'和'result.log'都没有输出,但是在a.log中有一些print语句的输出。 - J.Wang
1个回答

7
命令/root/a.py >> /root/a.log可将输出重定向到文件/root/a.log>>表示附加,而>则会覆盖。
您的脚本正在记录到result.log,而不是a.log。除非有print语句,否则不会进入a.log
在您的logging.basicConfig中,日志事件不会输出到控制台,只会输出到日志文件,因此没有“输出”要重定向到a.log
(在您的脚本中添加print'hello console',您应该会在a.log中看到它。)
编辑自注释: result.log可能不在您认为的位置。由于其路径取决于执行它的位置,而不是脚本所在的位置。将RESULT_LOG_FILE = 'result.log'更改为RESULT_LOG_FILE = '/root/result.log'

实际上,我在a.py文件中有一个“print”语句,并且它显示在a.log中。但是,“logging.error('ERROR')”的输出没有像我在“logging.basicConfig”中配置的那样记录在日志(LOG_FILE)中。 - J.Wang
2
result.log 可能不在您想象的位置。因为它的路径是由执行它的位置决定的,而不是脚本所在的位置。将 RESULT_LOG_FILE = 'result.log' 更改为 RESULT_LOG_FILE = '/root/result.log' 并尝试。 - aneroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接