news 2026/4/18 3:46:46

5分钟搞定Ubuntu开机自启脚本,测试启动脚本保姆级教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟搞定Ubuntu开机自启脚本,测试启动脚本保姆级教程

5分钟搞定Ubuntu开机自启脚本,测试启动脚本保姆级教程

你是不是也遇到过这样的问题:写好了一个监控脚本、数据采集脚本,或者一个自动备份的小工具,每次重启Ubuntu都要手动运行一次?太麻烦了!更糟的是,有时候忘记运行,关键任务就断掉了。

别担心——这篇教程就是为你准备的。不需要懂系统底层原理,不用查晦涩文档,5分钟内就能让你的脚本在Ubuntu开机时自动跑起来。我们用最直白的方式,带你实操三种稳定、可靠、适配主流Ubuntu版本(20.04/22.04/24.04)的开机自启方案,并重点说明每种方法的适用场景、常见坑点和验证技巧。所有操作都基于真实终端环境测试,代码可直接复制粘贴,一步一验证。


1. 方案对比与选型建议

在动手前,先搞清楚:为什么有这么多方法?哪一种最适合你?

Ubuntu开机自启的本质,是让系统在启动过程中按需执行你的命令。但不同阶段的执行环境差异很大——有的在图形界面加载前,有的依赖用户登录,有的需要完整桌面环境支持。选错方案,脚本可能“看似配置成功”,实则从未运行。

下面这张表,帮你快速锁定最适合的路径:

方案执行时机是否需要图形界面是否需要用户登录稳定性推荐场景
/etc/init.d+update-rc.d系统服务启动阶段(多用户模式)❌ 不需要❌ 不需要后台服务类脚本(如日志轮转、网络监听、硬件检测)
rc.local系统初始化末期,登录前❌ 不需要❌ 不需要简单命令行任务(如挂载磁盘、设置环境变量、启动守护进程)
GNOME 启动应用程序(gnome-session-properties用户登录后,桌面环境就绪时需要必须用户已登录图形化交互类脚本(如弹窗提醒、打开终端执行命令、启动GUI工具)

小贴士:如果你的脚本只是想在每次打开电脑、登录账号后自动运行(比如每天早上自动拉取天气、启动监控面板),直接选第三种,最快最稳;如果你做的是工控、服务器或无人值守设备,要求“开机即运行、不依赖桌面”,那就优先考虑前两种。


2. 方法一:/etc/init.d+update-rc.d(推荐用于后台服务)

这是最传统、最接近Linux标准服务管理的方式,兼容性极强,适用于Ubuntu 16.04至24.04全系列,且不受桌面环境影响。

2.1 准备你的测试脚本

我们先创建一个简单但可验证的脚本,放在桌面方便观察效果:

#!/bin/bash # /home/$USER/Desktop/test.sh # 切换到桌面目录 cd /home/$USER/Desktop/ # 创建一个带时间戳的标记文件,证明它确实运行了 echo "Script executed at $(date)" > startup_log_$(date +%s).txt # 列出当前目录内容(可选,用于调试) ls -l # 输出OK到系统日志,便于后续排查 logger "test.sh executed successfully" exit 0

注意

  • $USER替换成你自己的用户名(如ubuntujohn),或直接运行echo $USER查看;
  • 保存后赋予执行权限:
    chmod +x /home/$USER/Desktop/test.sh

2.2 复制到系统服务目录并注册

# 将脚本复制到 /etc/init.d(需sudo) sudo cp /home/$USER/Desktop/test.sh /etc/init.d/test-startup # 赋予可执行权限(重要!) sudo chmod +x /etc/init.d/test-startup # 注册为开机自启服务(默认优先级) sudo update-rc.d test-startup defaults

成功提示类似:
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults

这句警告可以忽略——它是Ubuntu从SysV init向systemd过渡的提示,defaults仍完全有效。

2.3 验证是否注册成功

# 查看服务是否已加入启动序列 ls -l /etc/rc*.d/*test-startup

你应该看到类似输出:
/etc/rc0.d/K20test-startup /etc/rc1.d/K20test-startup /etc/rc2.d/S20test-startup ...

其中S20表示“Start at priority 20”(20号启动),数字越小越早执行。

2.4 手动触发测试(无需重启)

为了快速验证,我们不等重启,直接模拟开机启动流程:

# 手动启动服务 sudo service test-startup start # 查看是否生成了标记文件(去桌面找) ls /home/$USER/Desktop/startup_log_*.txt # 查看系统日志确认执行记录 sudo journalctl -u test-startup --since "1 hour ago" | tail -5 # 或使用旧式日志查询 sudo tail -10 /var/log/syslog | grep "test.sh"

如果看到startup_log_171xxxxxx.txt文件,且日志里有test.sh executed successfully,说明一切正常!


3. 方法二:rc.local(轻量简洁,适合命令行任务)

rc.local是一个被广泛支持的“万能钩子”,只要系统完成基础初始化,它就会执行。它不依赖桌面,也不需要写服务定义,对新手极其友好。

3.1 启用rc-local服务(Ubuntu 20.04+ 默认禁用)

Ubuntu 18.04之后,rc.local默认未启用。我们先激活它:

# 创建 systemd 服务单元文件 sudo tee /etc/systemd/system/rc-local.service << 'EOF' [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 EOF # 创建空的 rc.local 文件(带执行权限) sudo tee /etc/rc.local << 'EOF' #!/bin/bash # rc.local # 在这里添加你的命令 # 注意:路径必须绝对,不能用 ~ 或 $HOME cd /home/$USER/Desktop && ./test.sh exit 0 EOF # 赋予执行权限 sudo chmod +x /etc/rc.local # 启用并启动服务 sudo systemctl enable rc-local sudo systemctl start rc-local

关键提醒

  • /etc/rc.local中的$USER不会自动展开,必须替换成真实用户名,例如/home/ubuntu/Desktop/test.sh
  • 所有路径务必使用绝对路径
  • exit 0必须保留,否则服务会认为启动失败。

3.2 验证rc.local是否生效

# 检查服务状态 sudo systemctl status rc-local # 查看最近执行日志 sudo journalctl -u rc-local -n 20 --no-pager

如果看到Started /etc/rc.local Compatibility和你的脚本输出,说明已就绪。


4. 方法三:GNOME 启动应用程序(图形界面用户首选)

这是最直观、最易调试的方式,专为桌面用户设计。它在你输入密码登录后、GNOME桌面完全加载完毕时执行,完美避开“桌面未就绪”的坑。

4.1 启动图形化配置工具

打开终端,输入:

gnome-session-properties

这会弹出「启动应用程序首选项」窗口。

4.2 添加你的脚本(两种写法任选)

推荐写法:通过gnome-terminal启动(带可见终端,便于调试)
  • 点击添加
  • 名称:Test Startup Script
  • 命令:
    gnome-terminal -- bash -c "cd /home/$USER/Desktop && ./test.sh; echo 'Press Enter to close'; read"
  • 注释:运行开机测试脚本(带终端反馈)

这样写的好处:脚本运行时会弹出一个终端窗口,你能实时看到echo "OK!"ls结果,出错也能立刻看到报错信息。

⚙ 精简写法:后台静默执行(适合生产环境)
  • 名称:Auto Run Test
  • 命令:
    /home/$USER/Desktop/test.sh
  • 注释:静默运行测试脚本

添加完成后,关闭窗口。无需重启,立即生效——下次你登录时就会自动运行。

4.3 登录后快速验证

  • 正常登录Ubuntu桌面;
  • 等待3–5秒;
  • 去桌面查看是否生成了startup_log_*.txt文件;
  • 如果用了带终端的写法,还会看到一个短暂弹出又关闭的终端窗口。

5. 常见问题与避坑指南

再好的教程,也绕不开实际踩过的坑。以下是我们在上百次实测中总结的高频问题,附带一键修复命令:

5.1 脚本没运行?先检查这三点

问题现象可能原因快速诊断命令修复方式
rc.local完全没反应rc-local服务未启用sudo systemctl is-enabled rc-localsudo systemctl enable --now rc-local
/etc/init.d脚本报“Permission denied”脚本无执行权限ls -l /etc/init.d/test-startupsudo chmod +x /etc/init.d/test-startup
GNOME 启动项不执行脚本路径错误或权限不足ls -l /home/$USER/Desktop/test.sh确保路径正确、chmod +x、用绝对路径

5.2 终端中文乱码?环境变量丢失?

很多脚本依赖LANGPATH等变量,在非交互式环境中(如rc.localinit.d)可能为空。统一解决方案:

在脚本开头添加:

#!/bin/bash export LANG=en_US.UTF-8 export PATH="/usr/local/bin:/usr/bin:/bin" cd /home/$USER/Desktop ./test.sh

5.3 如何安全移除已注册的服务?

  • 移除/etc/init.d方式:
    sudo update-rc.d -f test-startup remove sudo rm /etc/init.d/test-startup
  • 移除rc.local:编辑/etc/rc.local,删掉对应行即可;
  • 移除 GNOME 启动项:再次运行gnome-session-properties,选中条目点删除

6. 总结:你的脚本该走哪条路?

回顾一下,我们实操了三种Ubuntu开机自启路径,它们不是“谁更好”,而是“谁更合适”:

  • /etc/init.d:当你需要脚本像系统服务一样稳定运行,不依赖桌面、不依赖用户登录,比如部署一个树莓派数据采集器、工厂设备监控程序;
  • rc.local:当你只想加一行命令完成初始化(如挂载NAS、启动Python服务),追求极简、兼容老新系统;
  • 选 GNOME 启动项:当你就是普通桌面用户,脚本需要访问GUI资源(如弹窗、剪贴板、浏览器),或者你希望每次运行都“看得见、摸得着”。

无论选哪一种,核心原则不变:先本地测试脚本能否独立运行 → 再配置自启 → 最后用日志/文件/终端验证结果。跳过验证环节,等于没做完。

现在,关掉这篇教程,打开你的终端,挑一种方法,花3分钟试一遍。你会发现:所谓“系统级配置”,不过就是几条清晰、可重复、有反馈的命令而已。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:10:52

跨设备效率工具:颠覆式二维码传输解决方案

跨设备效率工具&#xff1a;颠覆式二维码传输解决方案 【免费下载链接】chrome-qrcode chrome-qrcode - 一个 Chrome 浏览器插件&#xff0c;可以生成当前 URL 或选中文本的二维码&#xff0c;或解码网页上的二维码。 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-qr…

作者头像 李华
网站建设 2026/4/17 19:11:07

Vivado基础操作入门:快速理解核心界面功能

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、专业、有“人味”; ✅ 摒弃模板化标题(如“引言”“总结”),代之以逻辑连贯、层层递进的叙事流; ✅ 所有核心知识点(Sources / IPI / Constra…

作者头像 李华
网站建设 2026/4/17 1:19:35

新来的同事问:为啥我们的嵌入式Linux单板量产烧录不用SD卡烧录?

来源 | 最后一个bug最近招来一位新同事维护我们的linux平台部分功能维护与需求开发&#xff0c;当时给了他一块裸板&#xff0c;并给了他一份USB烧录镜像的文档&#xff0c;然而他操作的时候USB烧录镜像比较慢&#xff0c;我看了他用了个hub&#xff0c;确实比我平时用USB烧录慢…

作者头像 李华
网站建设 2026/4/16 9:30:02

硬盘健康监控全攻略:用CrystalDiskInfo守护数据安全

硬盘健康监控全攻略&#xff1a;用CrystalDiskInfo守护数据安全 【免费下载链接】CrystalDiskInfo CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/cr/CrystalDiskInfo 数据灾难案例&#xff1a;一次硬盘故障的惨痛教训 2023年&#xff0c;某设计公司因忽视…

作者头像 李华
网站建设 2026/3/27 7:13:40

Emotion2Vec+ Large部署教程:从零开始搭建语音情感分析平台

Emotion2Vec Large部署教程&#xff1a;从零开始搭建语音情感分析平台 1. 为什么需要这个教程&#xff1f; 你是不是遇到过这些场景&#xff1a;客服中心想自动识别用户通话中的情绪波动&#xff0c;教育平台希望分析学生朗读时的情感状态&#xff0c;或者内容创作者想为配音…

作者头像 李华