我使用 systemd 在 Raspbian (Jessie) 上设置了一项服务,使其在启动后启动。守护进程配置如下所示:
[Unit]
After=multi-user.target
[Service]
Type=idle
User=root
ExecStart=/bin/sh -c "exec /home/pi/sources/mydaemon.py >> /home/pi/mydaemon.log 2>&1"
[Install]
WantedBy=multi-user.target
该重定向 >>
不起作用。我已经尝试了 StandardOutput
和 StandardError
可用的大部分选项,但它们永远不会将我的脚本输出打印到 /var/log/daemon.log 和 journalctl -u mydaemon.service
仅显示有关正在启动和停止的服务的消息。
我目前没有对脚本中的文件描述符做任何有趣的事情。我只希望我的 print()
或 logging.info()
陈述出现在我可以阅读的地方。有任何想法吗?
(需要说明的是,守护进程确实必须以 root 身份运行。这可能与我的打印问题有关吗?)
原文由 Eric 发布,翻译遵循 CC BY-SA 4.0 许可协议
通常你只是直接运行一个服务(确保它的可执行文件有一个 shebang 行):
并使用
StandardOutput=
的默认重定向到 systemd 日志,因此您可以使用journalctl -u mydaemon.service
读取日志。Systemd 可以很好地为您控制日志的文件增长和文件轮换。
您的服务以 root 身份运行是无关紧要的。
如果您没有看到上面的任何日志输出,还请检查整个日志以查找可能归因于您的服务的附近日志:
这是必要的,因为存在一个已知问题,即脚本存在之前的最后几行日志记录可能不会归因于该脚本。这对于在退出前只运行几分之一秒的脚本来说尤其明显。