将Python Systemd输出记录到日志文件

时间:2018-11-21 23:55:03

标签: python logging systemd

我将python脚本作为systemd服务运行,它在以下.service文件中定义:

[Unit]
Description=MyService
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/username/projects/website_notifier/run_service.py

[Install]
After=multi-user.target

然后在我的run_service.py文件中,使用日志记录模块记录输出:

import logging

logging.basicConfig(filename=settings['log_file_name'], level=logging.INFO)
logging.info("Starting notifier service at " + str(datetime.utcnow()))

问题是,当我运行通过systemctl启动文件时,该信息未记录到日志文件中。

现在,我知道一般systemd都将输出输出到journalctl,我不希望这样。我希望能够通过另一个没有管理员权限运行的脚本访问此日志。

我如何做到这一点?

3 个答案:

答案 0 :(得分:0)

首先检查您的服务是否正在运行:systemctl status MyService应该会向您显示错误。

After位于[Unit]部分,而不位于[Install]中。

一旦我确定您的脚本对我有用。其他要检查的东西:

  • 日志文件路径是绝对路径吗?
  • 启动服务的用户是否有权在此处写信?

我建议只记录到stdout和日志中,这样您就不必担心轮换日志文件,占用多少空间等了。journalctl确实非常适合查询日志。您应该能够以非root用户身份(与脚本相同的用户)或位于systemd-journal组中来访问日记。

答案 1 :(得分:0)

答案很简单,logging.info不会显示,但是logging.warn(及以上)会显示。

答案 2 :(得分:0)

此后,我已切换为使用Loguru进行日志记录,这似乎更加直观和实用。

此外,将以下内容添加到.service文件中可确保日志记录不被缓冲并且是实时的:

[Service]
Environment=PYTHONUNBUFFERED=1