news 2026/4/23 12:13:53

5分钟搞定Ubuntu开机启动脚本,实测有效不踩坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟搞定Ubuntu开机启动脚本,实测有效不踩坑

5分钟搞定Ubuntu开机启动脚本,实测有效不踩坑

你是不是也遇到过这样的问题:写好了Python服务脚本、部署了Web应用、配置好了数据采集程序,结果一重启Ubuntu,所有服务全停了?每次都要手动cd进目录、sudo python3 start.py,重复操作既耗时又容易出错。更糟的是,网上搜到的教程五花八门——有的说改rc.local,有的教写systemd服务,还有的推荐/etc/init.d老方法,试来试去不是权限报错,就是根本没执行,最后只能放弃。

别折腾了。这篇笔记不是理论堆砌,而是我用真实镜像“测试开机启动脚本”在Ubuntu 22.04 LTS上反复验证后整理出的一条真正走通的路径。全程5分钟内可完成,不依赖图形界面、不修改系统关键文件、不引入额外依赖,只用最基础的系统工具,每一步都有明确反馈和避坑提示。你不需要懂init.d机制,也不用研究systemd单元语法,只要会复制粘贴+看懂提示,就能让脚本稳稳跑在开机第一秒。


1. 为什么多数教程会失败?先避开三个致命误区

很多教程失效,不是方法本身错,而是忽略了Ubuntu版本演进带来的底层变化。我在测试镜像中复现了90%的常见失败场景,总结出新手最容易栽跟头的三个点:

  • 误区一:直接往/etc/rc.local里写命令,却忘了它默认已禁用
    Ubuntu 18.04之后,rc.local服务默认不启用,即使你改了文件,系统也不会读取它。网上大量“只需改rc.local”的教程,其实漏掉了最关键的启用步骤。

  • 误区二:在/etc/init.d/下放脚本,却跳过了LSB头校验
    新版SysVinit对脚本头部注释(即### BEGIN INIT INFO块)要求严格。少一个字段、格式错一位、甚至空行位置不对,update-rc.d就会静默失败,不报错也不生效。

  • 误区三:脚本里用sudo提权,却没处理密码交互
    开机阶段没有终端输入环境,echo "pwd" | sudo -S这类写法在无人值守启动时必然卡死。这不是脚本问题,是启动上下文缺失导致的。

这三点,本文全部绕开——我们不用rc.local,不碰sudo -S,也不写复杂LSB头。用最轻量、最稳定、最符合现代Ubuntu设计的方式。


2. 推荐方案:systemd用户服务(无需root,安全可靠)

Ubuntu 16.04起全面转向systemd,而systemd --user服务正是为普通用户定制的启动方案。它不需修改系统级配置,不涉及sudo密码,所有文件都放在你自己的家目录下,重启后自动加载,且支持日志查看、状态管理、失败重试等完整功能。

2.1 创建服务定义文件

打开终端,执行以下命令(全程在用户空间操作,无需sudo):

mkdir -p ~/.config/systemd/user nano ~/.config/systemd/user/mystartup.service

粘贴以下内容(请逐字复制,注意缩进和等号前后空格):

[Unit] Description=My Startup Script After=network.target [Service] Type=oneshot ExecStart=/home/ubuntu/startup.sh WorkingDirectory=/home/ubuntu RemainAfterExit=yes User=ubuntu Group=ubuntu [Install] WantedBy=default.target

关键说明

  • Type=oneshot表示脚本执行完即退出,适合初始化类任务;
  • RemainAfterExit=yes让systemd认为服务“仍在运行”,便于后续状态查询;
  • UserGroup显式指定,避免权限混淆;
  • After=network.target确保网络就绪后再执行,防止脚本因无网失败。

2.2 编写实际启动脚本

新建你的业务脚本,路径必须与上面ExecStart中一致:

nano /home/ubuntu/startup.sh

写入你要开机执行的命令。例如启动一个Python Web服务:

#!/bin/bash # 进入项目目录 cd /home/ubuntu/myapp # 激活虚拟环境(如有) source venv/bin/activate # 启动服务(后台运行,不阻塞) nohup python3 app.py > /home/ubuntu/app.log 2>&1 & # 可选:启动另一个进程,如定时任务 nohup python3 cron_worker.py > /home/ubuntu/cron.log 2>&1 &

保存后赋予执行权限:

chmod +x /home/ubuntu/startup.sh

避坑提醒

  • 所有路径必须写绝对路径(如/home/ubuntu/myapp),不能用~$HOME
  • 使用nohup + &确保进程脱离终端后台运行;
  • 日志重定向> file.log 2>&1必不可少,否则错误信息将丢失。

2.3 启用并测试服务

执行三条命令,完成注册与启用:

# 重新加载用户服务配置 systemctl --user daemon-reload # 启用服务(开机自启) systemctl --user enable mystartup.service # 立即启动一次,验证是否正常 systemctl --user start mystartup.service

检查状态是否成功:

systemctl --user status mystartup.service

如果看到active (exited)且无红色error字样,说明脚本已成功执行。查看日志确认细节:

journalctl --user -u mystartup.service -n 20 --no-pager

3. 备选方案:精简版rc.local(仅当必须用传统方式时)

如果你的环境受限(如老旧嵌入式Ubuntu),或必须兼容某些遗留脚本,这里提供一个经实测可用的rc.local精简方案,彻底规避默认禁用问题。

3.1 启用rc.local服务

Ubuntu 22.04中,rc.local服务单元存在但未启用。先创建服务文件:

sudo nano /etc/systemd/system/rc-local.service

填入以下内容:

[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

启用该服务:

sudo systemctl enable rc-local.service sudo systemctl start rc-local.service

3.2 编辑rc.local并添加任务

sudo nano /etc/rc.local

exit 0之前插入你的命令(注意:必须在exit 0上方,且每行末尾不能有多余空格):

#!/bin/bash # 你的启动命令(示例) su - ubuntu -c "cd /home/ubuntu/myapp && nohup python3 app.py > /home/ubuntu/app.log 2>&1 &" exit 0

核心要点

  • 使用su - ubuntu -c "command"切换到普通用户执行,避免root权限滥用;
  • 所有路径仍为绝对路径;
  • nohup&不可省略;
  • 保存后务必执行sudo chmod +x /etc/rc.local

4. 验证与排错:三步确认是否真正生效

光看命令返回success不够,必须验证开机真实行为。以下是我在镜像中验证的标准化流程:

4.1 模拟开机环境测试

不重启也能预判效果。执行:

# 清除上次运行痕迹 systemctl --user stop mystartup.service rm -f /home/ubuntu/app.log # 以开机时的最小环境运行服务 systemd-run --scope --scope --user /home/ubuntu/startup.sh # 检查日志是否生成 ls -l /home/ubuntu/app.log

若日志文件存在且有内容,说明脚本逻辑无误。

4.2 查看开机启动时间线

确认服务是否在正确时机启动:

systemd-analyze blame --user

找到mystartup.service,看其启动耗时是否合理(通常<1s)。若显示n/a,说明未被触发。

4.3 强制重启验证(最终确认)

执行:

sudo reboot

重启后立即检查:

# 等待30秒,然后检查服务状态 systemctl --user is-active mystartup.service # 应返回 "active" # 检查你的进程是否在运行 ps aux | grep "python3 app.py" | grep -v grep # 查看实时日志流 journalctl --user -u mystartup.service -f

如果三者均满足,恭喜,你的脚本已真正融入Ubuntu开机流程。


5. 常见问题速查表(附解决方案)

现象可能原因解决方案
systemctl --user status显示inactive (dead)服务未启用或未启动运行systemctl --user enable mystartup.servicestart
日志中出现Permission denied脚本无执行权限或路径错误chmod +x /home/ubuntu/startup.sh,检查所有路径是否绝对
进程启动后立刻消失nohup&缺失,导致前台阻塞退出在命令末尾补上nohup ... &
journalctl无输出服务未执行或日志重定向失效检查startup.sh中是否有> log 2>&1,或临时去掉重定向测试
重启后服务未运行用户session未随系统启动确保登录用户为ubuntu,且未使用sudo su -切换;如为服务器环境,加sudo loginctl enable-linger ubuntu

终极提示:所有操作均在用户空间完成,不影响系统其他服务。若某步失败,只需删除~/.config/systemd/user/mystartup.service/home/ubuntu/startup.sh,重新开始即可,零风险。


6. 总结:一条路走到底,比十种方法都管用

回顾整个过程,我们只做了三件事:

  1. 写一个标准的systemd用户服务文件——定义何时、以谁的身份、执行什么;
  2. 写一个干净的shell脚本——专注业务逻辑,不掺杂权限管理;
  3. 用两条命令启用并验证——daemon-reload+enable,再加start测试。

没有改系统配置,没有碰root密码,没有分析LSB头字段,更不需要记住update-rc.d的数字优先级。它简单,是因为Ubuntu的设计本就如此——systemd用户服务是官方推荐的现代方案,只是很多教程还在教十年前的方法。

你现在拥有的,不是一个“可能有效”的技巧,而是一个经过镜像实测、可立即复用、可放心交付的生产级方案。下次再遇到开机启动需求,直接照着做,5分钟,搞定。

--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_search_hot_keyword),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 23:16:41

Visual Syslog Server实战指南:构建高效Windows系统日志监控体系

Visual Syslog Server实战指南&#xff1a;构建高效Windows系统日志监控体系 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 在日常系统运维工作中&#xff0c;面…

作者头像 李华
网站建设 2026/4/23 12:12:04

Z-Image-Turbo参数怎么调?guidance_scale为0的生成逻辑解析

Z-Image-Turbo参数怎么调&#xff1f;guidance_scale为0的生成逻辑解析 1. 镜像环境与快速上手 本镜像基于阿里达摩院开源的 Z-Image-Turbo 模型构建&#xff0c;专为文生图任务优化。核心亮点在于&#xff1a;已预置32.88GB完整模型权重文件至系统缓存中&#xff0c;无需等待…

作者头像 李华
网站建设 2026/4/23 12:11:15

GPT-OSS-20B部署教程:基于vLLM的GPU算力适配

GPT-OSS-20B部署教程&#xff1a;基于vLLM的GPU算力适配 你是否也在寻找一个既能跑得动大模型&#xff0c;又能快速上手推理的解决方案&#xff1f;最近 OpenAI 开源的 GPT-OSS 系列中&#xff0c;GPT-OSS-20B 凭借其出色的性能和相对友好的资源需求&#xff0c;成为不少开发者…

作者头像 李华
网站建设 2026/4/20 9:17:55

零基础搭建i茅台自动预约系统:3分钟实现智能抢购

零基础搭建i茅台自动预约系统&#xff1a;3分钟实现智能抢购 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai 还在为抢购茅台而烦恼吗&…

作者头像 李华
网站建设 2026/4/18 21:11:51

2025年AI设计工具趋势:cv_unet_image-matting+云GPU部署教程

2025年AI设计工具趋势&#xff1a;cv_unet_image-matting云GPU部署教程 1. 引言&#xff1a;为什么图像抠图正在被AI重新定义&#xff1f; 你有没有遇到过这样的情况&#xff1a;花半小时用PS手动抠图&#xff0c;结果边缘毛糙、发丝丢失&#xff0c;还得反复调整蒙版&#x…

作者头像 李华