记录 Python Systemd 输出到日志文件

Log Python Systemd output to log file

我运行我的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,我不想要这个。我希望能够通过另一个没有 运行 管理员权限的脚本访问此日志。

我怎样才能做到这一点?

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

After 进入 [Unit] 部分,而不是 [Install].

一旦我确定你的脚本对我有用。其他要检查的事项:

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

我建议只记录到标准输出、日志,这样您就不必担心日志文件的轮换、需要多少 space 等等。还有 journalctl非常适合查询日志。您应该能够以非 root 用户身份访问日志,可以作为与脚本相同的用户,或者在组 systemd-journal.

答案很简单,logging.info 不会出现,但 logging.warn(及以上)会出现。

我已经改用 Loguru 进行日志记录,它似乎更加直观和实用。

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

[Service]
Environment=PYTHONUNBUFFERED=1