【问题标题】:python logging module no output while running in crontabpython logging模块在crontab中运行时没有输出
【发布时间】:2016-03-15 12:31:22
【问题描述】:

我有一个可执行的 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 应为空。
  • 两者都没有日志输出。在上面列出的代码中它应该是'log'文件,我在logging.basicConfig(filename=LOG_FILE)中配置
  • 我的意思是'log'和'result.log'都没有输出,a.log中有一些print语句输出

标签: python linux shell crontab centos6


【解决方案1】:

命令/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 中看到它。)

从 cmets 编辑:

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)中。
  • result.log 可能不是你想的那样。因为它的路径取决于它的执行位置,而不是脚本所在的位置。将RESULT_LOG_FILE = 'result.log' 更改为RESULT_LOG_FILE = '/root/result.log' 并尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
相关资源
最近更新 更多