在使用crontab执行脚本时的Python日志记录

1 投票
1 回答
1322 浏览
提问于 2025-04-18 09:47

我在用Python的日志模块来记录脚本中发生的事情。手动运行脚本的时候,一切都正常,但如果通过crontab运行,就什么都没有记录下来。所以可能是某个设置没有调整好,但我不知道该去哪里找出需要更改的设置。

以下是我用来设置日志的内容。

{
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
        "simple": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        }
    },

    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "DEBUG",
            "formatter": "simple",
            "stream": "ext://sys.stdout"
        },

        "info_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "INFO",
            "formatter": "simple",
            "filename": "info.log",
            "maxBytes": "10485760",
            "backupCount": "5",
            "encoding": "utf8"
        },

        "error_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "ERROR",
            "formatter": "simple",
            "filename": "errors.log",
            "maxBytes": "10485760",
            "backupCount": "5",
            "encoding": "utf8"
        }
    },

    "loggers": {
        "my_module": {
            "level": "ERROR",
            "handlers": ["console"],
            "propagate": "no"
        }
    },

    "root": {
        "level": "INFO",
        "handlers": ["console", "info_file_handler", "error_file_handler"]
    }
}

1 个回答

2

在使用Cron来定时执行任务时,有些地方可能会让人感到困惑:

  1. 它会在crontab用户的$HOME目录下启动。如果那里有一个errors.log文件,可能会导致任务无法正常运行。你需要检查一下文件的权限。

  2. 我从来没见过ext://sys.stdout这种格式。Cron会把标准输出(也就是程序运行时的输出信息)发送到邮件里,但这通常不太好用。

我建议把所有信息都记录到/tmp/myscript.log这个文件里,这样检查起来更方便。

撰写回答