我将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
(及以上(会出现。