Ubuntu系统开机自启并后台运行Python程序的技术问询
在Ubuntu开机自动后台运行Python程序的实现方法
完全可以通过开机执行的服务/脚本实现,而且比手动用tmux操作更可靠、自动化程度更高。Ubuntu 16.04及以后版本推荐使用systemd服务来配置,这是当前标准的开机自启方案,能确保程序持续在后台运行,不受终端会话影响,甚至程序意外崩溃后还能自动重启。
一、使用systemd服务配置(推荐)
1. 创建服务文件
在/etc/systemd/system/目录下创建一个自定义的服务文件,比如命名为my-python-app.service(后缀必须为.service):
sudo nano /etc/systemd/system/my-python-app.service
2. 编写服务配置内容
将以下内容写入文件,注意替换占位符为你的实际信息:
[Unit] Description=后台运行的Python应用 After=network.target # 若你的程序依赖网络,保留这一行;无网络需求可删除 [Service] User=your_username # 替换为你的系统用户名,避免用root权限运行程序 WorkingDirectory=/home/your_username/python_scripts # 替换为Python脚本所在的目录 ExecStart=/usr/bin/python3 /home/your_username/python_scripts/your_script.py # 替换为Python解释器路径和脚本路径 Restart=always # 程序意外退出时自动重启 RestartSec=5 # 重启间隔5秒 StandardOutput=append:/var/log/my-python-app.log # 输出日志到指定文件 StandardError=append:/var/log/my-python-app.log # 错误日志也写入同一文件 [Install] WantedBy=multi-user.target
3. 启用并启动服务
执行以下命令使配置生效:
# 重新加载systemd配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable my-python-app.service # 立即启动服务(无需重启系统) sudo systemctl start my-python-app.service
4. 验证服务状态
- 查看服务是否正常运行:
sudo systemctl status my-python-app.service
- 实时查看程序日志:
journalctl -u my-python-app.service -f
二、备选方案:使用rc.local(适用于旧版Ubuntu)
如果是Ubuntu 18.04及更早版本,也可以通过/etc/rc.local实现开机自启:
- 若系统没有
/etc/rc.local文件,先创建并赋予执行权限:
sudo touch /etc/rc.local sudo chmod +x /etc/rc.local
- 编辑
/etc/rc.local,在exit 0之前添加以下内容(替换占位符):
su - your_username -c "/usr/bin/python3 /path/to/your_script.py > /var/log/my-python-script.log 2>&1 &"
- 说明:
su - your_username切换到普通用户运行程序,避免root权限风险;> /var/log/... 2>&1将程序输出和错误信息写入日志文件;&让程序在后台运行。
注意:Ubuntu 20.04及以后版本默认不再启用
rc.local,因此更推荐使用systemd方案,稳定性和可维护性更强。
核心问题解答
- 能否达成与tmux手动操作同等效果?
不仅可以,systemd服务比tmux更可靠:开机自动启动,程序崩溃自动重启,无需依赖终端会话,即使你退出所有终端,程序依然持续运行。 - 脚本/服务文件的位置:
- systemd服务文件:
/etc/systemd/system/目录 - rc.local脚本:
/etc/rc.local文件
- systemd服务文件:
内容的提问来源于stack exchange,提问作者Mark Hubelbank
相关产品推荐
相关产品推荐

