使用crontab执行脚本时登录python

使用crontab执行脚本时登录python,python,logging,cron,crontab,Python,Logging,Cron,Crontab,我使用python的日志模块来记录脚本中发生的事情。如果我手动运行脚本,它会工作得很好,但是如果我通过crontab运行脚本,则不会记录任何内容。因此,可能缺少一些设置,但我不知道在哪里可以找到要更改的设置 作为参考,这是我用于日志记录的设置 { "version": 1, "disable_existing_loggers": false, "formatters": { "simple": { "format": "%(asct

我使用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"]
    }
}

在Cron下运行东西可能有点棘手:

  • 它从crontab用户的
    $HOME
    目录开始。如果那里有errors.log文件,它可能无法工作。检查权限

  • 我从未见过
    ext://sys.stdout
    之前的格式。Cron将stdout路由到电子邮件,这往往不起作用


  • 我建议将所有消息路由到
    /tmp/myscript.log
    ——这样更容易检查。

    那里没有errors.log或info.log。$HOME的权限是drwx------这意味着当前用户有权在那里做事情。Cron需要什么样的权限?从何处路由所有邮件?在crontab中,Cron默认将/dev/stdout路由到电子邮件,但电子邮件通常没有正确设置,所以Cron会感到困惑。1) 将日志显式写入文件。另外:2)执行
    tail-f/var/log/syslog
    查看Cron在做什么。这很微妙:)