将 Python 脚本作为 systemd 任务运行时出现 ModuleNotFoundError

将 Python 脚本作为 systemd 任务运行时出现 ModuleNotFoundError

我有一个Python 脚本,我想在启动时运行它。然而,当我将它作为 systemd 服务运行时,它似乎无法找到其中一个模块。这是状态消息:

● mqttproc.service - MQTT Post-processor
     Loaded: loaded (/etc/systemd/system/mqttproc.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2021-12-06 11:10:45 GMT; 2min 31s ago
    Process: 2375 ExecStart=/usr/bin/python3 /home/ken/python/mqttproc/mqttproc.py (code=exited, status=1/FAILURE)
   Main PID: 2375 (code=exited, status=1/FAILURE)

Dec 06 11:10:45 MintVM systemd[1]: Started MQTT Post-processor.
Dec 06 11:10:45 MintVM python3[2375]: Sensor positions [100.0, 80.0, 60.0, 40.0, 20.0, 0.0] (Litres)
Dec 06 11:10:45 MintVM python3[2375]: Traceback (most recent call last):
Dec 06 11:10:45 MintVM python3[2375]:   File "/home/ken/python/mqttproc/mqttproc.py", line 131, in <module>
Dec 06 11:10:45 MintVM python3[2375]:     import paho.mqtt.client as mqtt
Dec 06 11:10:45 MintVM python3[2375]: ModuleNotFoundError: No module named 'paho'
Dec 06 11:10:45 MintVM systemd[1]: mqttproc.service: Main process exited, code=exited, status=1/FAILURE
Dec 06 11:10:45 MintVM systemd[1]: mqttproc.service: Failed with result 'exit-code'.

奇怪的是这个脚本从命令行运行不会失败。我什至让它作为 systemd 服务在另一台机器上运行。我的 .service 文件非常简单:

[Unit]
Description=MQTT Post-processor

[Service]
ExecStart=/usr/bin/python3 /home/ken/python/mqttproc/mqttproc.py
WorkingDirectory=/home/ken/python/mqttproc

[Install]
WantedBy=multi-user.target

谁能指出我所缺少的明显的东西吗?

提前致谢。

答案1

作业通过 运行cron,或者systemd启动脚本不在桌面上运行的同一运行时环境中运行。systemd启动脚本作为root.您的任何PATH更改或其他环境变量设置都不会~/.bashrc自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(读取man xhost)。

可以在Read 文件cron中为所有作业设置环境变量。crontabman 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

相关内容