AWS EC2 Ubuntu下systemd运行Python脚本报status=1/FAILURE排查求助
systemd运行Python脚本失败的排查方案
1. 拉取服务完整运行日志
systemd服务的所有标准输出、错误输出默认都会记录到journald日志中,执行以下命令即可查看该服务的完整运行日志,包含Python脚本抛出的具体异常信息:
sudo journalctl -u CATALOG_REST-py.service -n 100 --no-pager
如果需要实时观察服务重启后的报错,加上-f参数即可实时滚动刷新日志。
2. 先修复服务配置中的已知错误
你当前的服务配置存在两处明显问题,是大概率的失败诱因:
- 路径不统一:服务配置中写的ExecStart路径是
/home/ubuntu/GreenHouse/Catalog/Catalog_REST.py,但报错信息中显示实际执行的路径是/home/GreenHouse/Catalog/Catalog_REST.py,确认脚本真实存放路径后统一配置即可。 - 不必要的终端绑定:后台服务不需要绑定终端输入,删除
StandardInput=tty-force这行配置即可,systemd后台运行时不会分配终端,该配置会直接触发脚本退出。
建议补充以下配置项避免权限、相对路径相关问题:
[Service] # 指定和你手动运行时相同的用户,避免权限问题 User=ubuntu # 指定脚本所在的工作目录,避免相对路径读取文件失败 WorkingDirectory=/home/ubuntu/GreenHouse/Catalog ExecStart=/usr/bin/python3 Catalog_REST.py Type=simple
修改完配置后需要重载systemd配置再重启服务:
sudo systemctl daemon-reload sudo systemctl restart CATALOG_REST-py.service
3. 模拟systemd运行环境复现问题
如果修改配置后仍报错,可以手动模拟systemd的运行环境定位问题:
# 切换到root用户,匹配systemd默认运行身份 sudo su # 执行服务配置中的命令,直接观察报错 /usr/bin/python3 /home/ubuntu/GreenHouse/Catalog/Catalog_REST.py
你手动用ubuntu用户运行脚本正常,大概率是root用户运行时缺少Python依赖、或者无法读取相对路径下的配置文件导致的异常。
内容的提问来源于stack exchange,提问作者etnamaid
相关产品推荐
相关产品推荐

