未从`systemd`服务脚本中找到Python模块

问题描述 投票:1回答:3

使用先前的数十个答案,我很惊讶我找不到任何东西...

我将paho mqtt库用于一个非常简单的python程序,以报告一些数据(在Raspberry Pi上运行)。我从python程序(my_program.py)中的导入是:

import paho.mqtt.client as mqtt

如果我使用python my_program.py从命令行运行该程序,它将运行而不会出现错误。但是,我试图将其设置为系统服务来管理其执行。我已经使用类似的python程序完成了12次,设置了各种bash脚本和服务文件。他们都工作,除了这一件事。我之所以这样说是因为我认为它与bash或服务本身无关。为了完整起见,这里是设置。

从运行的bash脚本/ systemd-

## Service (my_program.service):
ExecStart=/home/pi/my_program.sh

## and bash (my_program.sh)
python /home/pi/my/directory/my_program.py

当我开始启动服务时,我得到:

pi@ArmstrongSE:/etc/systemd/system $ sudo systemctl status my_program
* my_program.service
   Loaded: loaded (/etc/systemd/system/my_program.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-11-23 13:59:58 PST; 22s ago
  Process: 31100 ExecStart=/home/pi/my_program.sh (code=exited, status=1/FAILURE)
 Main PID: 31100 (code=exited, status=1/FAILURE)

Nov 23 13:59:54 ArmstrongSE systemd[1]: Started my_program.service.
Nov 23 13:59:54 ArmstrongSE my_program.sh[31100]: Starting MQTT Transmitter
Nov 23 13:59:55 ArmstrongSE my_program.sh[31100]: /home/pi/data/solar/20191123135605.json
Nov 23 13:59:58 ArmstrongSE my_program.sh[31100]: Traceback (most recent call last):
Nov 23 13:59:58 ArmstrongSE my_program.sh[31100]:   File "/home/pi/my/directory/my_program.py", line 25, in <module>
Nov 23 13:59:58 ArmstrongSE my_program.sh[31100]:     import paho.mqtt.client as mqtt
Nov 23 13:59:58 ArmstrongSE my_program.sh[31100]: ImportError: No module named paho.mqtt.client

要确认路径分配在那里--

从python解释器中获得:

>>> import paho.mqtt.client as mqtt
>>> print(mqtt.__file__)
/home/pi/.local/lib/python2.7/site-packages/paho/mqtt/client.pyc

sys.path报告:

>>> import sys
>>> print(sys.path)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-arm-linux-gnueabihf', 
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/home/pi/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']

我被困住了。。。为什么不加载?

更新/澄清:

我可以从任何地方(任何目录)运行bash脚本,它可以工作。因此,它必须是systemd设置(?)中的内容。

[使用许多先前的答案,我很惊讶我找不到任何东西...我正在使用paho mqtt库用于一个非常简单的python程序来报告一些数据(在Raspberry Pi上运行)。 ...

python bash systemd
3个回答
0
投票

尝试用root用户安装模块。


0
投票

这可能是python的链接问题。如果要通过pip安装库,则该库可能链接也可能未正确安装。我建议使用类似...的方法重新安装mqtt库。

sudo -H pip3 install --system paho-mqtt

0
投票

[我想我想出了问题所在... systemd默认将其服务运行为root。我认为,哪一个/应该(请参见下文)允许使用其他用户的sudo或cli上的实际root用户使用root作为运行内容。

仅关注systemd的服务文件,我在man pages中发现有一个[Service]参数,该参数可让您指定谁运行服务。在这种情况下,我尝试将参数设置为:

© www.soinside.com 2019 - 2024. All rights reserved.