python 日志记录模块在 crontab 运行 时没有输出

python logging module no output while running in crontab

我有一个可执行 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 但没有成功。我不知道为什么会这样。

命令 /root/a.py >> /root/a.log 输出重定向 到文件 /root/a.log 中。 >> = 追加,而 > 会覆盖。

您的脚本正在记录到 result.log,而不是 a.log。除非你有一个 print 声明,否则 a.log.

不会有任何内容

在您的 logging.basicConfig 中,日志事件不会输出到控制台,只会输出到日志文件,因此没有 "output" 重定向到 a.log

(在您的脚本中添加一个 print 'hello console',您应该会在 a.log 中看到它。)

根据评论编辑:

result.log可能不是你想的那样。因为它的路径是由它执行的位置决定的,而不是脚本所在的位置。将 RESULT_LOG_FILE = 'result.log' 更改为 RESULT_LOG_FILE = '/root/result.log'