Python 脚本的 systemd 服务激活失败

systemd service activation for Python script fails

我想将 python 脚本注册为后台服务,在系统启动时执行,并在后台持续 运行。该脚本打开网络套接字、本地日志文件并执行多个线程。该脚本格式正确,运行时没有任何编译或运行时问题。

我使用以下服务文件进行注册:

[Unit]
Description=ModBus2KNX Gateway Daemon
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/ModBusDaemon.py

[Install]
WantedBy=multi-user.target

启动服务导致以下错误:

● ModBusDaemon.service - ModBus2KNX Gateway Daemon
   Loaded: loaded (/lib/systemd/system/ModBusDaemon.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2021-01-04 21:46:29 CET; 6min ago
  Process: 1390 ExecStart=/usr/bin/python3 /usr/bin/ModBusDaemon.py (code=exited, status=1/FAILURE)
 Main PID: 1390 (code=exited, status=1/FAILURE)

Jan 04 21:46:29 raspberrypi systemd[1]: Started ModBus2KNX Gateway Daemon.
Jan 04 21:46:29 raspberrypi systemd[1]: ModBusDaemon.service: Main process exited, code=exited, status=1/FAILURE
Jan 04 21:46:29 raspberrypi systemd[1]: ModBusDaemon.service: Failed with result 'exit-code'.

感谢您的支持!

相关帖子让我找到了问题的解决方案。 Ubuntu systemd custom service failing with python script 指的是同一个问题。将 WorkingDirectory 添加到 Service 部分的建议解决方案为我解决了这个问题。虽然,我找不到足够的 systemd 文档来概述隐式依赖。

正如 MBizm 所说,您还必须添加 WorkingDirectory。

然后您还必须 运行 这些命令:

sudo systemctl daemon-reload
sudo systemctl enable your_service.service
sudo systemctl start your_service.service