You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过systemd服务运行Python程序的技术求助

解决Python程序systemd服务启动失败(exit-code)问题

核心问题分析

  1. 日志缺失:原服务配置将输出定向到syslog,导致无法通过journalctl查看程序启动错误,难以定位问题。
  2. 环境变量差异:sudo运行失败但sudo -E成功,说明程序依赖用户pi的环境变量(如Python库路径),而systemd服务默认环境变量不全。
  3. 相对路径错误:程序中创建logs/目录使用相对路径,systemd默认工作目录为/,导致权限不足无法创建日志目录。
  4. 潜在权限问题:访问串口/dev/ttyUSB0需要dialout组权限,GPIO操作需要gpio组权限,需确认用户组归属。

分步解决方案

1. 修复日志输出,启用journalctl日志捕获

修改服务文件,将标准输出/错误定向到journal,确保能查看启动错误:

[Service]
# 替换原StandardOutput/StandardError配置
StandardOutput=journal+console
StandardError=journal+console

2. 指定工作目录

程序依赖相对路径创建日志目录,需将服务工作目录设置为脚本所在路径:

[Service]
WorkingDirectory=/home/pi/Downloads

3. 继承用户环境变量

添加环境变量配置,保留pi用户的必要环境(如Python库路径):

[Service]
# 加载pi用户的bash环境变量(按需调整)
EnvironmentFile=/home/pi/.bashrc
# 或直接指定关键环境变量,比如Python库路径
# Environment="PYTHONPATH=/home/pi/.local/lib/python3.9/site-packages"

4. 确认权限配置

  • 确保pi用户属于dialout组(访问串口):
    groups pi
    # 若没有dialout,执行:
    sudo usermod -aG dialout pi
    
  • 确保pi用户属于gpio组(GPIO操作):
    groups pi
    # 若没有gpio,执行:
    sudo usermod -aG gpio pi
    

5. 修复程序代码中的小问题

程序末尾的GPIO.cleanup缺少括号,导致无法执行GPIO清理,修改为:

finally:
    all_leds_off()
    GPIO.cleanup()  # 添加括号

修改后的完整服务文件

[Unit]
Description=Logging Signal Strength of Rockblock Iridium
After=multi-user.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/Downloads
EnvironmentFile=/home/pi/.bashrc
ExecStart=/usr/bin/python3 /home/pi/Downloads/signal_test.py
Restart=always
StandardOutput=journal+console
StandardError=journal+console
SyslogIdentifier=%n

[Install]
WantedBy=multi-user.target

验证步骤

  1. 重新加载服务配置:
    sudo systemctl daemon-reload
    
  2. 启动服务:
    sudo systemctl start logger_autostart.service
    
  3. 查看服务状态:
    sudo systemctl status logger_autostart.service
    
  4. 查看详细日志:
    journalctl -u logger_autostart.service -f
    

内容的提问来源于stack exchange,提问作者Sebastian Bätz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:40:26