二维码

Ubuntu systemctl 服务失败:主进程退出,代码=退出,状态=1/FAILURE

1388 人阅读 | 时间:2021年12月07日 10:26

我正在编写一个 python 脚本,该脚本将一些 MQTT 主题订阅到本地 MQTT 代理,并且在推送消息时,该脚本将调用同一目录中另一个脚本中的函数以将更改加载到 SQL 数据库中。

在终端中手动运行时,脚本工作正常:

python3 /directory/path/to/file/listen_mqtt.py

但是,我试图让这个文件在 Ubuntu 系统启动时自动执行。我在新服务中创建了:

/lib/systemd/system/listen_mqtt_py.service

服务描述如下:

[Unit]Description=Listen MqttAfter=mosquitto.serviceWants=network.targetConflicts=getty@tty1.service[Service]Type=simpleExecStart=/usr/bin/python3 /home/bt/dev/dexter-mqtt-to-sql/listen_mqtt.pyStandardInput=tty-force[Install]WantedBy=multi-user.target

我还启用了该服务并尝试使用以下方法启动该服务:

sudo systemctl enable listen_mqtt_py.service

sudo systemctl start listen_mqtt_py.service

重新启动机器并尝试手动运行服务时,我收到以下消息:

sudo systemctl status listen_mqtt_py.service● listen_mqtt_py.service - Listen Mqtt
     Loaded: loaded (/lib/systemd/system/listen_mqtt_py.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2020-11-17 13:45:28 AEDT; 14s ago
    Process: 2206 ExecStart=/usr/bin/python3 /home/bt/dev/dexter-mqtt-to-sql/listen_mqtt.py (code=exited, status=1/FAILURE)
   Main PID: 2206 (code=exited, status=1/FAILURE)Nov 17 13:45:27 btdms systemd[1]: Started Listen Mqtt.Nov 17 13:45:28 btdms systemd[1]: listen_mqtt_py.service: Main process exited, code=exited, status=1/FAILURENov 17 13:45:28 btdms systemd[1]: listen_mqtt_py.service: Failed with result 'exit-code'.

我做了一些研究,发现这种类型的错误可能与在加载某些所需设备之前过早调用服务有关。因此,我尝试更改After=tonetwork-online.target和 to mosquitto.service,但是没有运气,服务仍然以相同的错误消息退出。

因为即使我sudo systemctl start listen_mqtt_py.service手动运行该服务也不会完全执行,所以我怀疑这不是由于另一个服务没有及时加载。这是其他一些原因。但我想不通为什么。

listen_mqtt.py如果需要,我也很高兴发布 python 脚本


原来这是由于用户对 python 包的特权。可以在此处找到诊断此问题的方法

让我们找到无法启动的 systemd 服务

$ systemctl --failed

发现 systemd-modules-load 服务有问题。我们想知道更多。

$ systemctl status systemd-modules-load

如果需要重新生成失败的消息,请重新启动服务

$ systemctl restart systemd-modules-load

现在获得PID:

journalctl _PID=15630

或者

journalctl _SYSTEMD_UNIT=systemd-modules-load.service

您应该能够看到失败时生成的错误消息。查看错误消息,我们知道该paho包未正确导入。

解决方案

一种。使用root安装相关的python包(这是我最终做的)

进入根 CLI

sudo su -

湾 为服务中所需的 python 包授予 root 权限,我没有这样做,因为我不确定它与其他用户的行为方式,我不确定 root 是否需要比仅包更多的权限。可以在此处找到有关此问题的讨论


©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×