Python 记录器文件权限

Dou*_*oug 4 python logging

Ubuntu 服务器 16.04.5 LTS

我有一个 python 脚本,它使用以下代码创建日志文件:

today = datetime.today()
datem = datetime(today.year, today.month, today.day)
logger = logging.getLogger('processImport')
hdlr = logging.FileHandler('{0}myLog_{1}-{2}-{3}.log'.format(myLogFileLocation, datem.year, datem.month, datem.day))
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)

保存日志条目:

logger.info(logMessage)
Run Code Online (Sandbox Code Playgroud)

然后我有一个 cron 作业,它通过执行一个os.remove(fullFilePath)用于删除文件的 python 文件在一段时间后删除旧的日志文件。

但是,执行此 cron 作业时出现权限错误。

OSError: [Errno 13] Permission denied: PathToTheFile\theLogFileName.log
Run Code Online (Sandbox Code Playgroud)

当我检查文件的权限时,它们被设置为:

-rw-r--r-- 1 www-data www-data etc etc
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使 cron 作业有权删除日志文件?

谢谢你。

Sag*_*wda 5

该文件夹似乎存在写入问题权限。更改权限应该会有所帮助。

尝试这个:

log_dir = '/abs/path/of/directory'
os.chmod(log_dir, 0777)
Run Code Online (Sandbox Code Playgroud)

让我知道事情的后续。

  • 这是一个非常糟糕的主意,因为权限太宽松。现在每个人都有权在那里创建和删除文件。除了销毁日志文件以隐藏黑客尝试之外,还可以用符号链接替换它们,然后让守护程序写入用户也无权访问的其他文件。 (2认同)
  • 在 Python 3 中,您需要在模式(如果是八进制)前加上 `0o` 前缀: ```os.chmod(log_dir, 0o777)``` (2认同)