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

Ubuntu 20.04下systemd服务无法以root权限执行Python脚本

Ubuntu 20.04下systemd服务无法以root权限执行Python脚本

嘿,我之前也碰到过类似的问题,咱们一步步排查解决:

首先看你的systemd服务配置,有个明显的小问题——ExecStart的写法不对!你现在写的是/home/dir checker.py,systemd根本不知道用什么来执行这个脚本啊。得明确指定conda环境里的Python解释器路径,改成这样:

ExecStart=/home/sirjay/miniconda3/envs/myenv/bin/python /home/dir/checker.py

这是最基础的一步,不然脚本可能都没真正跑起来。

接下来分两种情况说:

情况1:用root用户运行服务

既然你试过User=root不行,那先改脚本里的命令——root用户不需要加sudo!直接把脚本里的两行改成:

os.system("systemctl restart other-task")
os.system("reboot")

同时确保/home/dir/checker.py的权限是root能读取执行的(比如chmod 755 /home/dir/checker.py)。修改完service文件后,记得重新加载systemd配置:

sudo systemctl daemon-reload
sudo systemctl restart checker.service

然后用systemctl status checker.service看看服务状态,确认是否正常运行。

情况2:坚持用sirjay用户运行服务

直接在脚本里用sudo会有问题,因为systemd服务运行时没有交互式终端,要是sirjay执行sudo需要输入密码,那这条命令会直接卡住,而且不会在错误日志里输出提示(因为sudo在非交互式下失败是静默的)。

解决办法是给sirjay配置免密码执行这两个命令:

  1. 用visudo命令编辑sudoers文件(一定要用这个命令,避免语法错误锁死系统)
  2. 在文件末尾添加一行:
sirjay ALL=(ALL) NOPASSWD: /bin/systemctl restart other-task, /sbin/reboot
  1. 保存退出后,重启服务试试。

另外,你可以看看标准输出日志/home/dir/service_checker_output.log,说不定能找到sudo执行失败的提示,比错误日志更有用。

备注:内容来源于stack exchange,提问作者sirjay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:09:29