Python脚本无法通过systemd正常重启问题排查
问题描述
我正在学习如何让Python脚本出错时自动重启,参考教程做了小幅修改(仅调整文件名等)。相关信息如下:
相关文件
/home/myuser/Desktop/test/test.py:
from datetime import datetime from time import sleep path = "/home/dec13666/Desktop/test/log.txt" while True: with open(path, "a") as f: now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") f.write(now+"\n") f.close() sleep(1) raise Exception("Error Simulation!!!")
davidcustom.service:
[Unit] Description=Python Script Made By Me After=multi-user.target [Service] RestartSec=10 Restart=always ExecStart=python3 /home/myuser/Desktop/test/test.py [Install] WantedBy=multi-user.target
执行命令
sudo nano /etc/systemd/system/davidcustom.service sudo systemctl daemon-reload sudo systemctl enable davidcustom.service sudo systemctl start davidcustom.service sudo systemctl status davidcustom.service
服务状态信息
● davidcustom.service - Python Script Made By Me Loaded: loaded (/etc/systemd/system/davidcustom.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Sun 2022-09-04 14:12:12 EDT; 8s ago Process: 3341 ExecStart=python3 /home/myuser/Desktop/test/test.py (code=exited, status=1/FAILURE) Main PID: 3341 (code=exited, status=1/FAILURE) CPU: 100ms
注意事项
- 手动运行
test.py正常,但通过systemd服务运行时出现上述错误。 - 已尝试在
davidcustom.service的[Service]段添加User=myusername和Type=simple,问题仍未解决。
请问我哪里操作有误?
问题排查与解决
核心问题:日志路径用户名不匹配
你的Python脚本里写的日志路径是/home/dec13666/Desktop/test/log.txt,但你的用户目录是/home/myuser/——这是关键错误。手动运行时可能你用的是dec13666用户(或者该路径实际存在),但systemd按配置运行时,无论是以root还是myuser身份,都无法访问不属于当前用户的路径(甚至路径根本不存在),直接触发报错退出。
修复步骤
- 修正脚本中的路径:
打开test.py,把日志路径改成正确的用户目录:
path = "/home/myuser/Desktop/test/log.txt"
- 确保目录权限正确:
如果服务配置了User=myuser,执行以下命令确保测试目录归属正确:
sudo chown -R myuser:myuser /home/myuser/Desktop/test/
- 重启服务生效:
sudo systemctl daemon-reload sudo systemctl restart davidcustom.service
额外排查建议
- 确认Python路径:有些系统中
python3的绝对路径可能不是默认环境变量中的值,用which python3命令查看实际路径,然后修改服务文件中的ExecStart为绝对路径,比如:
ExecStart=/usr/bin/python3 /home/myuser/Desktop/test/test.py
- 查看详细日志:用
journalctl -u davidcustom.service -f实时跟踪服务日志,能获取更具体的报错信息,方便定位其他潜在问题。
内容的提问来源于stack exchange,提问作者David Espinosa
相关产品推荐
相关产品推荐

