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

如何在Ubuntu Server中配置Python应用自启动并赋予其sudo权限

最优方案:systemd系统服务配置

Ubuntu Server默认自带systemd进程管理工具,无需额外安装,配置极简、稳定性高,完美满足开机自启、权限控制、进程守护需求,完全支持Python的subprocess.Popen()调用系统命令。

前置准备

  • 确认Python应用的绝对路径,比如/opt/myapp/main.py,同时通过which python3获取Python解释器的绝对路径(默认一般为/usr/bin/python3)
  • 先手动运行应用测试功能正常,Popen()相关逻辑无报错

具体落地步骤

1. 编写systemd服务配置文件

在/etc/systemd/system/目录下新建服务文件,比如命名为myapp.service,内容参考如下:

[Unit]
Description=自定义Python应用服务
After=network.target # 若应用需要联网,添加该配置确保网络启动后再运行应用

[Service]
Type=simple
User=root # 直接用root运行,天然具备最高权限,Popen调用任何命令都不需要额外输入sudo密码
Restart=on-failure # 可选配置,应用崩溃后自动重启
WorkingDirectory=/opt/myapp/ # 替换为你的应用根目录的绝对路径
ExecStart=/usr/bin/python3 /opt/myapp/main.py # 替换为你的Python解释器绝对路径+应用入口文件绝对路径
Environment=PYTHONUNBUFFERED=1 # 可选配置,让Python日志直接输出到systemd日志,方便排查问题

[Install]
WantedBy=multi-user.target

如果你不想用root运行应用,只想给应用开放特定命令的sudo权限,把User参数改成你指定的普通用户,再执行下一步的sudoers配置即可。

2. (可选)非root运行时配置sudo免密权限

如果用普通用户运行服务,需要让该用户执行Popen调用的命令时无需输入密码,操作如下:
执行visudo命令编辑sudoers文件,在末尾添加一行:

你的用户名 ALL=(ALL) NOPASSWD: /usr/bin/xxx, /usr/bin/yyy

把你的用户名替换为实际的运行用户,/usr/bin/xxx替换为Popen里要调用的命令的绝对路径,多个命令用英文逗号分隔。

3. 加载配置并启用服务

依次执行以下命令:

  • 重新加载systemd配置:sudo systemctl daemon-reload
  • 启用开机自启:sudo systemctl enable myapp.service
  • 立即启动服务:sudo systemctl start myapp.service

验证配置

  • 查看服务运行状态:sudo systemctl status myapp.service,显示active (running)即为正常运行
  • 查看应用日志:journalctl -u myapp.service -f,可实时查看应用输出,确认Popen调用是否正常
  • 重启服务器验证:执行sudo reboot,重启后再次查看服务状态,确认可自动启动

注意事项

  • 所有路径必须使用绝对路径,不要用相对路径,避免systemd找不到文件
  • 如果Python应用使用了虚拟环境,ExecStart里的Python解释器要替换为虚拟环境内的绝对路径,比如/opt/myapp/venv/bin/python3
  • 如果Popen调用的是自定义脚本,要确保脚本具备可执行权限,路径配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:39:00