news 2026/4/1 11:03:04

测试开机启动脚本部署总结,适合初学者参考

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
测试开机启动脚本部署总结,适合初学者参考

测试开机启动脚本部署总结,适合初学者参考

1. 引言:为什么需要开机启动脚本

在实际的开发和运维场景中,我们常常希望某些程序或服务能够在系统启动时自动运行,而无需手动登录后执行。例如:

  • 自动启动后台监控脚本
  • 启动仿真程序或嵌入式测试环境
  • 部署无人值守设备时初始化关键任务

对于 Linux 初学者而言,实现“开机自启”看似复杂,实则有多种简单可靠的方法。本文将以Ubuntu系统为例,详细介绍如何通过rc.local/etc/profile两种方式部署开机启动脚本,并结合具体案例帮助初学者快速上手。

文章内容基于真实可运行的实践流程,适用于 Ubuntu 16.04 及以上版本(包括 18.04、20.04),特别适合作为镜像自动化初始化配置的参考方案。


2. 方法一:使用 rc.local 实现开机启动

2.1 创建启动脚本文件

首先,在用户目录下创建一个用于存放脚本的文件夹,并新建.sh脚本文件。

mkdir -p /home/user/Documents/scripts touch /home/user/Documents/scripts/auto_run_test.sh

使用文本编辑器(如nanovim)编辑该文件:

vim /home/user/Documents/scripts/auto_run_test.sh

写入以下内容:

#!/bin/bash echo "helloStartup" > /home/user/Documents/scripts/output.txt cd /home/user/mywbc_v5_usb/build echo "EnterBuildDir" >> /home/user/Documents/scripts/output.txt ./sim/sim echo "AfterSim" >> /home/user/Documents/scripts/outputend.txt

说明: -#!/bin/bash是脚本解释器声明,必须放在第一行。 - 使用>>追加写入日志,避免覆盖前面的日志信息。 - 所有路径建议使用绝对路径,防止因工作目录不同导致执行失败。

2.2 设置脚本可执行权限

Linux 默认不允许随意执行脚本,需显式赋予执行权限:

sudo chmod +x /home/user/Documents/scripts/auto_run_test.sh

也可以使用755权限(推荐):

sudo chmod 755 /home/user/Documents/scripts/auto_run_test.sh

提示:不建议使用777,存在安全风险,仅在调试阶段临时使用。

2.3 启用并修改 rc.local 文件

rc.local是传统 SysVinit 系统中的开机执行脚本,在大多数 Ubuntu 版本中仍可用,但默认可能未启用。

检查是否存在 rc.local
ls /etc/rc.local

如果不存在,则手动创建:

sudo touch /etc/rc.local sudo chmod +x /etc/rc.local
编辑 rc.local 内容
sudo vim /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. # # By default this script does nothing. # 添加你的命令 cd /home/user/Documents/scripts sh auto_run_test.sh exit 0

⚠️注意要点: - 必须以#!/bin/sh -e开头,-e表示遇到错误立即退出。 -exit 0必须保留,否则可能导致系统卡在启动界面。 - 脚本中不要阻塞主线程(如无限循环无后台运行),否则影响系统启动完成。

2.4 验证 rc-local 服务是否启用

现代 Ubuntu 使用 systemd,rc.local是否生效取决于rc-local.service是否激活。

查看服务状态:

systemctl status rc-local

若未启用,需手动启用:

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

3. 方法二:将命令追加到 /etc/profile(适用于无 rc.local 的系统)

部分精简版 Ubuntu 或容器环境中可能没有rc.local,此时可以利用/etc/profile实现类似效果。

3.1 profile 文件的作用机制

/etc/profile是所有用户登录时都会加载的全局环境配置文件。当图形界面或终端登录时会自动执行其中的命令。

局限性:此方法只在用户登录后触发,不是真正的“开机即运行”,适合 GUI 登录场景。

3.2 修改 /etc/profile

打开文件进行编辑:

sudo vim /etc/profile

在文件末尾添加:

# 自动执行开机脚本 if [ -f /home/user/Documents/scripts/auto_run_test.sh ]; then sh /home/user/Documents/scripts/auto_run_test.sh fi

保存退出即可。

优点:无需额外服务支持,兼容性强
缺点:依赖用户登录,无法用于无界面服务器常驻任务


4. 常见问题与解决方案

4.1 脚本未执行?检查点清单

检查项建议操作
脚本是否有执行权限使用ls -l script.sh查看,确保有x权限
是否使用了相对路径改为绝对路径,如/home/user/...
rc.local 是否被 systemd 启用运行systemctl is-enabled rc-local确认
日志输出是否可写确保目标目录和文件具有写权限
脚本是否报错中断在脚本开头去掉-e或重定向错误输出调试

4.2 输出日志为空?定位执行上下文

由于rc.local以 root 身份运行,其当前目录通常是/root,因此:

echo "test" > ./output.txt

会尝试写入/root/output.txt,普通用户不可访问。

✅ 正确做法是使用完整路径:

echo "helloStartup" > /home/user/Documents/scripts/output.txt

4.3 如何调试开机脚本?

可在脚本中加入时间戳记录执行情况:

#!/bin/bash DATE=$(date '+%Y-%m-%d %H:%M:%S') echo "[$DATE] Script started" >> /home/user/Documents/scripts/boot.log # 其他命令...

重启后查看日志文件确认是否执行:

cat /home/user/Documents/scripts/boot.log

5. 最佳实践建议

5.1 推荐使用 systemd 替代 rc.local(进阶)

虽然rc.local简单易用,但从长期维护角度看,systemd service更加规范、可控。

示例:创建一个 systemd 服务

# /etc/systemd/system/my-startup-script.service [Unit] Description=My Auto Startup Script After=multi-user.target [Service] Type=oneshot ExecStart=/home/user/Documents/scripts/auto_run_test.sh RemainAfterExit=yes User=user [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reexec sudo systemctl enable my-startup-script.service

✅ 优势:支持日志追踪(journalctl -u my-startup-script)、依赖管理、失败重试等高级功能。

5.2 安全性提醒

  • 避免对脚本和系统文件设置777权限
  • 尽量以非 root 用户运行应用逻辑
  • 敏感操作应加入日志审计和异常处理

5.3 适用于镜像打包的自动化思路

如果你正在制作一个预装环境的系统镜像(如用于 AI 推理、边缘计算设备),可将整个流程写成自动化部署脚本:

#!/bin/bash # deploy-autostart.sh SCRIPT_DIR="/home/user/Documents/scripts" SERVICE_FILE="/etc/systemd/system/auto-run-test.service" # 创建目录和脚本 mkdir -p $SCRIPT_DIR cat > $SCRIPT_DIR/auto_run_test.sh << 'EOF' #!/bin/bash echo "$(date): Startup script running" >> $SCRIPT_DIR/boot.log cd /home/user/mywbc_v5_usb/build && ./sim/sim EOF chmod +x $SCRIPT_DIR/auto_run_test.sh # 配置 systemd 服务(推荐) cat > $SERVICE_FILE << 'EOF' [Unit] Description=Auto Run Test Script After=multi-user.target [Service] Type=oneshot ExecStart=/home/user/Documents/scripts/auto_run_test.sh RemainAfterExit=yes User=user [Install] WantedBy=multi-user.target EOF chmod 644 $SERVICE_FILE sudo systemctl daemon-reload sudo systemctl enable auto-run-test.service echo "Deployment completed. Reboot to test."

这样可以在批量部署时一键完成开机启动配置。


6. 总结

本文围绕“测试开机启动脚本”的实际需求,系统梳理了两种适用于初学者的实现方式:

  • rc.local方案:接近“真正开机启动”,适合服务类任务,需注意权限和服务启用;
  • /etc/profile方案:简单直接,但依赖用户登录,适合桌面环境下的初始化任务;

同时提供了完整的脚本示例、权限设置、调试方法以及常见问题排查清单,确保读者能够一次成功部署。

最后,我们也提出了向systemd service迁移的进阶建议,帮助开发者构建更稳定、可维护的自动化启动体系。

无论你是搭建开发环境、部署边缘设备,还是制作标准化系统镜像,本文的内容都具备良好的实用性和扩展性。


获取更多AI镜像

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

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

5分钟快速上手YimMenu:GTA V最强防护菜单系统

5分钟快速上手YimMenu&#xff1a;GTA V最强防护菜单系统 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …

作者头像 李华
网站建设 2026/3/30 10:34:35

Claude-API终极指南:从零到精通的完整教程

Claude-API终极指南&#xff1a;从零到精通的完整教程 【免费下载链接】Claude-API This project provides an unofficial API for Claude AI, allowing users to access and interact with Claude AI . 项目地址: https://gitcode.com/gh_mirrors/cla/Claude-API Claud…

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

Proteus与Keil联合调试中的断点设置技巧

从代码到信号&#xff1a;Proteus与Keil联合断点调试实战全解析你有没有遇到过这种情况——程序逻辑明明写得没问题&#xff0c;但串口就是收不到完整数据&#xff1b;或者GPIO翻转了&#xff0c;外设却毫无反应&#xff1f;这时候靠“烧录-运行-观察”的老办法&#xff0c;就像…

作者头像 李华
网站建设 2026/3/28 10:13:47

YimMenu终极教程:GTA5游戏增强工具完整使用指南

YimMenu终极教程&#xff1a;GTA5游戏增强工具完整使用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …

作者头像 李华
网站建设 2026/4/1 0:40:45

YimMenu进阶指南:从功能应用到系统优化的全方位掌握

YimMenu进阶指南&#xff1a;从功能应用到系统优化的全方位掌握 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMen…

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

高效下载管理器插件:轻松管理浏览器下载任务

高效下载管理器插件&#xff1a;轻松管理浏览器下载任务 【免费下载链接】download-manager 谷歌浏览器下载管理器插件【A chrome extension for managing download】 项目地址: https://gitcode.com/gh_mirrors/dow/download-manager 还在为浏览器下载列表杂乱无章而头…

作者头像 李华