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