通过systemd运行Python脚本无法加载模块

Shi*_*iri 9 python linux service systemd

我有一个使用的Python脚本,zmq我已经安装了这个库pip install zmq,如果通过命令行手动调用,我可以正常运行程序.但是,只要我尝试让systemd单元调用脚本,就运行systemctl status myservice.serviceshow ImportError: No module named zmq.

我的服务文件如下所示:

[Unit]
Description=Does Something

[Service]
Type=simple
ExecStart=/bin/sh /var/lib/project/runpythonscript.sh
Restart=always

[Install]
Alias=myservice.service
Run Code Online (Sandbox Code Playgroud)

哪个runpythonscript.sh是以root身份运行我的python脚本的非常简单的shell脚本.从命令行手动运行这个shell脚本运行我的python程序完全正常但是通过服务调用它导致它找不到zmq模块.

任何帮助表示赞赏.

Ita*_*chi 12

将此属性添加到[Service]部分以确保systemd以指定用户身份运行。

User=pi
Run Code Online (Sandbox Code Playgroud)

参考AndyD的解决方案。


Shi*_*iri 11

systemd以root身份运行.通过pip安装的模块是为用户而不是为系统安装的,因此安装没有root权限的模块会使模块无法访问root.

为了解决这个问题,我运行sudo -H pip install zmqsudo -H pip3 install zmq为root用户安装Python 2.7和Python 3+的软件包.这允许systemd在尝试执行Python脚本时访问模块.