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配置免密码执行这两个命令:
- 用
visudo命令编辑sudoers文件(一定要用这个命令,避免语法错误锁死系统) - 在文件末尾添加一行:
sirjay ALL=(ALL) NOPASSWD: /bin/systemctl restart other-task, /sbin/reboot
- 保存退出后,重启服务试试。
另外,你可以看看标准输出日志/home/dir/service_checker_output.log,说不定能找到sudo执行失败的提示,比错误日志更有用。
备注:内容来源于stack exchange,提问作者sirjay
相关产品推荐
相关产品推荐

