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

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身份,都无法访问不属于当前用户的路径(甚至路径根本不存在),直接触发报错退出。

修复步骤

  1. 修正脚本中的路径:
    打开test.py,把日志路径改成正确的用户目录:
path = "/home/myuser/Desktop/test/log.txt"
  1. 确保目录权限正确:
    如果服务配置了User=myuser,执行以下命令确保测试目录归属正确:
sudo chown -R myuser:myuser /home/myuser/Desktop/test/
  1. 重启服务生效:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:42:25