我有一个使用zmq的
Python脚本,我通过pip install zmq安装了这个库,如果通过命令行手动调用,我可以正常运行程序.但是,只要我尝试让systemd单元调用脚本,运行systemctl status myservice.service就会显示ImportError:没有名为zmq的模块.
我的服务文件如下所示:
[Unit] Description=Does Something [Service] Type=simple ExecStart=/bin/sh /var/lib/project/runPythonScript.sh Restart=always [Install] Alias=myservice.service
runPythonScript.sh是一个非常简单的shell脚本,以root身份运行我的python脚本.从命令行手动运行这个shell脚本运行我的python程序完全正常但是通过服务调用它导致它找不到zmq模块.
任何帮助表示赞赏.
解决方法
systemd以root身份运行.通过pip安装的模块是为用户而不是系统安装的,因此安装没有root权限的模块会使模块无法访问root.
为了解决这个问题,我运行了sudo -H pip install zmq和sudo -H pip3 install zmq来为root用户安装Python 2.7和Python 3的软件包.这允许systemd在尝试执行Python脚本时访问模块.