【发布时间】:2020-03-19 15:03:13
【问题描述】:
有了之前的几十个答案,我很惊讶我找不到任何东西......
我正在使用paho mqtt 库来编写一个非常简单的 python 程序来报告一些数据(在 Raspberry Pi 上运行)。我从 python 程序 (my_program.py) 中的导入是:
import paho.mqtt.client as mqtt
如果我使用python my_program.py 从命令行运行程序,它运行时不会出错。但是,我正在尝试将其设置为系统服务来管理其执行。我已经用类似的 python 程序做了十几次,设置了各种 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 设置中的东西 (?)。
【问题讨论】:
-
“来自我得到的 python 解释器”。你是以 root 身份做的...?
-
不,这是作为 pi 完成的(系统上唯一的用户);需要明确的是,
sudo也没有完成。我认为它与系统文件有关 - 它作为 pi 运行良好,但在 systemd 中启动时却没有。我并没有忘记我已经在用户 pi 下本地安装了所有东西 - 但我也以用户 pi 的身份运行所有东西。 (?)