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

无法通过systemd启动Python脚本:日志报错与环境问题排查

解决systemd启动Python脚本的两大问题:日志路径错误与虚拟环境未生效

看起来你碰到了两个典型的systemd运行Python脚本的问题,我来一步步帮你解决:

1. 日志路径导致的FileNotFoundError

从错误日志能看到,脚本试图访问/logs/mainserver.log,但你代码里写的是相对路径logs/mainserver.log——这是因为systemd默认的工作目录是根目录/,所以相对路径会从根目录开始解析,而不是你脚本所在的/home/ubuntu/app/backend/。

解决方法有两个,选一个就行:

  • 方法一:在systemd单元文件里指定工作目录
    在[Service]块里添加一行:
    WorkingDirectory=/home/ubuntu/app/backend
    
    这样脚本运行时的工作目录就是脚本所在的文件夹,相对路径logs/mainserver.log就会指向/home/ubuntu/app/backend/logs/mainserver.log,记得提前创建logs文件夹并给nobody用户读写权限:
    mkdir -p /home/ubuntu/app/backend/logs
    chown nobody:nogroup /home/ubuntu/app/backend/logs
    
  • 方法二:在Python脚本里用绝对路径
    修改日志初始化代码,把日志路径改成绝对路径,比如:
    loghandler = TimedRotatingFileHandler('/home/ubuntu/app/backend/logs/mainserver.log', when="midnight")
    
    同样要确保logs文件夹存在且权限正确。

2. 虚拟环境未生效,调用系统Python的问题

你已经在ExecStart里指定了虚拟环境的Python路径/home/ubuntu/app/env/bin/python,但还是调用了系统Python,大概率是权限问题:nobody用户可能没有访问虚拟环境目录的权限。

解决步骤:

  1. 先检查虚拟环境目录的权限,确保nobody能进入并执行Python:
    ls -ld /home/ubuntu/app/env
    ls -l /home/ubuntu/app/env/bin/python
    
  2. 如果权限不足,调整目录权限:
    chmod -R 755 /home/ubuntu/app/env
    
    或者更安全的方式,把nobody用户加入到ubuntu组(假设目录属于ubuntu用户):
    usermod -aG ubuntu nobody
    chmod -R 775 /home/ubuntu/app/env
    
  3. 另外,也可以在systemd单元文件里明确设置环境变量,确保虚拟环境的路径优先:
    在[Service]块里添加:
    Environment="PATH=/home/ubuntu/app/env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
    
    这样系统会优先使用虚拟环境里的Python。

关于脚本的运行目录

默认情况下,systemd服务的运行目录是根目录/,除非你在[Service]块里通过WorkingDirectory参数指定了其他路径,就像我在第一个问题里建议的那样。

最后别忘了重启systemd服务让配置生效:

sudo systemctl daemon-reload
sudo systemctl restart your-service-name.service

内容的提问来源于stack exchange,提问作者binrebin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:43:13