news 2026/2/22 5:46:02

一键配置开机运行.sh文件,再也不用手动操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一键配置开机运行.sh文件,再也不用手动操作

一键配置开机运行.sh文件,再也不用手动操作

你是不是也遇到过这样的情况:每次重启电脑后,都要手动打开终端、切换到脚本目录、再执行一遍./xxx.sh?重复操作不仅费时,还容易忘记——尤其当你依赖这个脚本启动关键服务、同步数据、或初始化开发环境时,一次遗漏就可能导致整个工作流中断。

别担心,这不是你的问题,而是没用对方法。Linux 系统本身提供了多种可靠的开机自启机制,其中最轻量、最稳定、也最适合个人开发者和测试场景的方案,就是通过rc.local实现脚本自动执行。它不需要改写 systemd 单元、不涉及复杂权限管理,更不会因为系统升级突然失效。只要脚本本身能跑通,加进rc.local就能稳稳运行。

本文将带你从零开始,真正实现“一键配置”:不绕弯、不踩坑、不查文档二次确认。我们会用一个真实可用的测试镜像(名称为“测试开机启动脚本”)作为实操载体,完整走通创建脚本 → 授权 → 注册 → 验证全流程。所有命令可直接复制粘贴,每一步都附带清晰说明和避坑提示。哪怕你刚接触 Linux 终端,也能在 5 分钟内搞定。


1. 先确认系统是否支持 rc.local

不是所有 Ubuntu 版本默认启用rc.local,尤其是 18.04 及之后的桌面版,虽然文件存在,但服务可能被禁用。所以第一步不是写脚本,而是确认基础环境是否就绪

打开终端,输入:

systemctl status rc-local

如果看到类似active (exited)的状态,说明已启用,可以跳过本节;
如果显示inactive (dead)或报错Unit rc-local.service not found,请继续执行以下两步修复:

1.1 创建并启用 rc-local 服务

先检查/etc/systemd/system/rc-local.service是否存在:

ls /etc/systemd/system/rc-local.service

若提示No such file or directory,说明需要手动创建。执行以下命令:

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

然后创建空的/etc/rc.local文件,并赋予可执行权限:

sudo touch /etc/rc.local sudo chmod +x /etc/rc.local

最后启用服务:

sudo systemctl enable rc-local sudo systemctl start rc-local

再次运行systemctl status rc-local,应显示active (exited)
这一步只需做一次,后续所有开机脚本都基于此服务运行。


2. 编写你的开机脚本(.sh 文件)

脚本内容完全由你控制,但有三个关键原则必须遵守:路径明确、权限正确、退出可靠。我们以镜像名称“测试开机启动脚本”对应的典型需求为例——比如启动一个模拟器、记录日志、或进入指定目录执行任务。

2.1 创建脚本文件

推荐统一放在~/scripts目录下(即当前用户的主目录下的 scripts 文件夹),便于管理和备份:

mkdir -p ~/scripts nano ~/scripts/auto_run_test.sh

提示:nanovim更友好,新手按Ctrl+O保存,Ctrl+X退出。

在编辑器中输入以下内容(注意:第一行必须是#!/bin/bash,且不能有多余空格):

#!/bin/bash # 记录启动时间,用于验证是否真正执行 echo "[$(date '+%Y-%m-%d %H:%M:%S')] System booted and script started" >> /home/$USER/startup_log.txt # 示例1:创建一个测试输出文件 echo "helloStartup" > /home/$USER/output.txt # 示例2:切换到指定目录并运行程序(请按实际路径修改) # cd /home/$USER/mywbc_v5_usb/build # ./sim/sim # 示例3:启动一个后台服务(如 Python Web 服务) # nohup python3 /home/$USER/myapp/app.py > /home/$USER/app.log 2>&1 & # 必须添加这一行,确保脚本正常退出 exit 0

重点说明

  • #!/bin/bash是解释器声明,必须顶格、无空格、无 BOM,否则脚本无法识别;
  • 使用$USER而非硬编码用户名(如user),保证脚本在任意用户下都可复用;
  • 所有路径使用绝对路径,避免因开机时工作目录不确定导致失败;
  • exit 0是收尾标准动作,告诉系统“执行成功”,缺了可能导致rc.local后续命令不执行;
  • 注释行(#开头)不影响运行,建议保留,方便日后维护。

2.2 设置脚本执行权限

仅保存文件还不够,Linux 默认禁止.sh文件直接执行。需显式授权:

chmod +x ~/scripts/auto_run_test.sh

验证是否成功:
输入ls -l ~/scripts/auto_run_test.sh,若看到-rwxr-xr-x(其中x表示可执行),说明权限已生效。


3. 将脚本注册为开机任务

现在脚本已就绪,下一步是让它在每次开机时自动运行。我们通过修改/etc/rc.local实现——这是 Linux 传统且兼容性最强的方式。

3.1 编辑 rc.local 文件

sudo nano /etc/rc.local

文件默认内容类似这样(不同版本略有差异):

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing.

你需要在# By default this script does nothing.这一行之后、exit 0之前,插入你的脚本调用命令。推荐写法如下:

# Start custom startup script cd /home/$USER/scripts ./auto_run_test.sh

注意事项:

  • 不要用sudo sh auto_run_test.sh——rc.local本身以 root 权限运行,无需再 sudo;
  • cd切换路径后再执行,比写绝对路径更清晰、更易维护;
  • 务必确保exit 0仍在文件末尾,且是最后一行(前面不能有空行)。

保存并退出(Ctrl+OEnterCtrl+X)。

3.2 验证 rc.local 文件格式

执行以下命令检查语法是否合法:

sudo /etc/rc.local

如果没有任何报错,且看到startup_log.txtoutput.txt已生成,说明配置正确。
如果有报错(如Permission deniedNo such file),请回头检查路径、权限、#!/bin/bash是否写错。


4. 测试与验证:不重启也能快速确认

很多人误以为必须重启才能验证,其实大可不必。rc.local本质就是一个 shell 脚本,我们可以手动模拟开机执行流程,快速定位问题。

4.1 手动触发一次

sudo /etc/rc.local

等待几秒后,检查结果:

cat /home/$USER/startup_log.txt cat /home/$USER/output.txt

如果看到时间戳和"helloStartup",说明脚本已能正常运行
如果报错,请根据错误信息精准修正(常见问题见第 5 节)。

4.2 检查日志确认执行时机

rc.local在多用户模式末尾执行,可通过 journalctl 查看其运行记录:

sudo journalctl -u rc-local --since "1 hour ago" | grep -i "auto_run"

若看到类似Started /etc/rc.local Compatibility和脚本输出,证明它确实在开机阶段被调用。


5. 常见问题与解决方案(真实踩坑总结)

在上百次实测中,以下问题是新手最高频的“卡点”,我们为你提前打包解决:

问题现象根本原因一招解决
脚本不执行,startup_log.txt为空rc.local中缺少exit 0,或位置不对打开/etc/rc.local,确认exit 0是倒数第二行,且前面无空行
报错Permission denied脚本文件未加+x权限,或rc.local自身无执行权sudo chmod +x /etc/rc.local+chmod +x ~/scripts/auto_run_test.sh
脚本执行了,但cd切换失败或程序找不到使用了相对路径(如./sim/sim),而rc.local当前目录是/全部改用绝对路径,例如/home/$USER/mywbc_v5_usb/build/sim/sim
output.txt生成了,但内容为空或乱码脚本中用了中文引号“”而非英文引号""全部替换为英文标点,Linux 不识别中文符号
重启后仍不生效rc-local服务未启用,或 Ubuntu 版本禁用了该服务执行sudo systemctl enable --now rc-local强制启用

额外提醒:如果你的脚本需要访问图形界面(如弹窗、打开浏览器),rc.local无法满足——它运行在无图形会话的后台。此时应改用用户级 autostart(如~/.config/autostart/),但本文聚焦“纯终端任务”,不展开。


6. 更轻量的备选方案:追加到 /etc/profile(适合单用户简单任务)

如果只是想让某个命令在每次登录终端时自动运行(比如设置环境变量、启动代理),且你只用一个用户、不依赖 root 权限,那么修改/etc/profile是更简单的选择。

注意:/etc/profile影响所有用户,如只为当前用户,请改用~/.bashrc

执行:

echo "# Auto-run on login" | sudo tee -a /etc/profile echo "cd ~/scripts && ./auto_run_test.sh" | sudo tee -a /etc/profile

这样,每次你打开新终端窗口,脚本就会自动执行。但它不是真正的“开机启动”(不随系统启动,只随终端登录),适合调试阶段快速验证逻辑。


7. 总结:你已经掌握的不仅是脚本,更是自动化思维

回顾整个过程,你其实完成了一次典型的 Linux 自动化闭环:

  • 定义目标:让.sh文件开机自动运行;
  • 选择工具rc.local—— 简单、稳定、跨版本兼容;
  • 编写脚本:遵循路径、权限、退出三原则;
  • 注册任务:通过标准系统服务注入;
  • 验证闭环:不依赖重启,手动触发即可确认效果。

这背后的能力,远不止于“省一次手动点击”。它意味着你可以把重复性操作封装成可复用的单元,把环境初始化变成一键交付,把故障恢复变成自动重试。无论是部署 AI 镜像、启动本地大模型服务,还是定时拉取训练数据,这套方法论都通用。

现在,你的“测试开机启动脚本”镜像已经准备就绪。下次重启,它会安静地在后台完成所有设定——而你,只需要打开终端,查看output.txt,然后喝一口咖啡。

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

AI编程助手功能增强完整指南

AI编程助手功能增强完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request limit. / Too many free t…

作者头像 李华
网站建设 2026/2/21 5:43:31

3大维度突破:中文语料库高效获取完整指南

3大维度突破&#xff1a;中文语料库高效获取完整指南 【免费下载链接】nlp_chinese_corpus 大规模中文自然语言处理语料 Large Scale Chinese Corpus for NLP 项目地址: https://gitcode.com/gh_mirrors/nl/nlp_chinese_corpus 副标题&#xff1a;从下载瓶颈到质量管控&…

作者头像 李华
网站建设 2026/2/22 2:42:56

如何用工具提升LOL胜率? LeagueAkari全方位辅助体验

如何用工具提升LOL胜率&#xff1f; LeagueAkari全方位辅助体验 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 英雄联盟辅…

作者头像 李华
网站建设 2026/2/21 22:56:36

五相永磁同步电动机仿真:PMSM矢量控制与Simulink仿真应用

五相永磁同步电动机仿真 PMSM矢量控制 simulink仿真五相永磁同步电动机&#xff08;PMSM&#xff09;这玩意儿最近在高端驱动领域挺火&#xff0c;比传统三相电机多出来的两相绕组不光能提升功率密度&#xff0c;还能玩出各种容错控制的花活。今儿咱们就手搓一个基于矢量控制的…

作者头像 李华
网站建设 2026/2/21 5:27:20

7个技巧教你高效管理视频资源:媒体内容备份方案完全指南

7个技巧教你高效管理视频资源&#xff1a;媒体内容备份方案完全指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 在数字内容爆炸的…

作者头像 李华