通过systemd启动python时出现断言错误

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

我的 Python 脚本似乎遇到了断言错误,但只有当我通过

systemd
启动它时。否则,如果从命令行手动启动,它可以正常工作。我认为这可能是一个权限问题,但以 root 身份手动执行也可以正常运行。

enter image description here

这就是错误。这个错误所在的Python文件可以在这里找到:https://github.com/lericson/mavlink-tools/tree/master,我正在使用

logdl.py

我几乎可以肯定这不是实际的 Python 本身的问题,因为它从命令行手动运行时运行得非常好。有什么想法吗?快速谷歌发现了旧 Pipenv 的一个错误,但我确保我的都是最新的。

systemd
服务:

[Unit]
Description=Logger Service
After=network-online.target

[Service]
ExecStart=/home/logger/start_logger.sh

[Install]
WantedBy=multi-user.target

start_logger.sh

#!/bin/sh

/home/logger/.venv/bin/python3 /home/logger/logger/main.py

从这里,

main.py
等待,直到检测到飞行控制器设备。然后它启动
logdl.py
作为子进程并等待它完成。它还会闪烁 LED,以便用户知道下载何时完成,然后等到飞行控制器被移除,然后再循环返回以再次检测它。

更新:

我从进程中删除了 shell 脚本,意识到这可能是不必要的。现在,服务文件调用

/home/logger/.venv/python3 /home/logger/logger/main.py
本身。但是,现在每次连接飞行控制器时都会记录串行异常。

现在错误:

serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

再次,在终端中手动运行服务命令时不存在错误。它仅作为服务运行

python service systemd mavlink
1个回答
0
投票
  1. AssertionError 是我在

    journalctl
    中看到的,但事实证明错误实际上是 SerialException,导致断言失败

  2. SerialException 是由两件事引起的,第一个是在 Pi Zero 上启用了串行控制台(通过 raspi-config 禁用它)。第二个是将用户添加到 dialout。

我仍然很困惑为什么它在命令行上工作没有问题,但不能作为服务工作,但执行上述操作使其作为服务工作,所以问题解决了。如果有人能解释为什么会出现这种情况,那就太好了。

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