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

我怎样才能做到这一点?

我后来改用Loguru进行日志记录,它似乎更直观、更可用。

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

[Service]
Environment=PYTHONUNBUFFERED=1

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

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

有一次我修复了你的脚本对我有效。其他需要检查的东西:

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

我建议您只将日志记录到stdout和日志中,这样您就不必担心旋转日志文件、占用多少空间等问题。此外,journalctl对于查询日志非常好。您应该能够以非root用户的身份访问日志,或者以与脚本相同的用户的身份,或者以systemd-journal组的身份访问。

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

最新更新