- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有了之前的几十个答案,我很惊讶我找不到任何东西......
我将 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
设置 (?) 中的内容。
最佳答案
我想我知道问题出在哪里了... systemd
默认以 root
运行其服务。我认为哪个/应该(见下文)允许使用 sudo 为另一个用户或 cli 上的实际 root
用户运行相当于 root
的东西。
只关注 systemd 的服务文件,我在 man pages 中找到有一个 [Service]
参数可让您指定谁运行该服务。在这种情况下,我尝试将参数设置为:
[Service]
User=pi
ExecStart=/home/pi/my_program.sh
这允许服务运行而不会出现错误(上述错误)。
我也可以使用这些设置并无错误地执行:
[Service]
User=root
ExecStart=/home/pi/my_program.sh
原因:
对于发现自己在这里的其他人,如果您从 [Service]
部分省略 User=
参数,则默认为 root
。但是,这与将 User=
参数设置为 root
(例如 User=root
)或另一个用户(在我的情况下为 pi )。
我不太了解其中的细微差别,但来自 environmental variables 上的文档, User=
参数用于设置 $PATH
变量。如果服务文件没有设置 User=
我认为它会导致路径分配出现问题。我认为这就是为什么将 User=
设置为 pi 或 root 可以解决这个问题,而使用默认值似乎会导致问题。
欢迎解释和教育。谢谢。
关于从 `systemd` 服务脚本中找不到 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59012899/
我正在尝试在 Windows 上运行的小于 1GB 的 VM 上设置 YouTrack 和 TeamCity。使用率将非常低(用户和请求)。这是一个 POC 环境,如果它有效,我可能会将它推送到一个超
所以我在尝试使用 FORFILES 解决这个问题时遇到了麻烦。我正在尝试获取不超过 4 天的文件。所以基本上少于 4 天。然而,这似乎不太可能,因为/d -4 获取所有 4 天或更早的项目。 以下是我
如何从下面的 events 表中选择小于 15 分钟前创建的 events? CREATE TABLE events ( created_at timestamp NOT NULL DEFAU
Google Analytics Realtime提供 rt:minutesAgo ,可以过滤查询。 然而,它是一个维度而不是一个度量标准,<=不能在过滤器中使用。 假设我想在最后 n 分钟内获得一些
iOS 核心数据 - 严重的应用程序错误 - 尝试插入 nil 你好, 我的应用程序实际上运行稳定,但在极少数情况下它会崩溃并显示此错误消息... 2019-04-02 20:48:52.437172
我想制作一个 html div 以快速向右移动(例如不到 1 秒)并消失。然后1秒后再次直接出现在这个过程最开始div的位置。此过程将由单击按钮并重复 10 次触发。 我试图在 CSS 中使用过渡属性
我发现使用 TimeTrigger 是 Windows 10 (UWP) 上计划后台任务的方式。但是看起来我们需要给出的最小数字是 15 分钟。只是想知道,即使我们安排它在接下来的 1 分钟内运行,警
我必须在 1 秒内在屏幕上打印 2^20 行整数 printf 不够快,还有其他易于使用的快速输出替代方法吗? 每一行只包含 1 个整数。 我要求它用于竞争性编程问题,我必须将其源代码提交给法官。 最
我是一名优秀的程序员,十分优秀!