开机自动执行build和sim命令,开发效率翻倍
在嵌入式开发、仿真测试或持续集成环境中,每次开机后手动进入项目目录、编译代码、启动仿真程序(如./sim/sim)不仅繁琐,还容易出错。如果能实现开机自动执行 build 和 sim 命令,就能省去重复操作,让系统一启动就进入工作状态,大幅提升开发效率。
本文将带你一步步实现:如何通过一个简单的启动脚本,在系统开机时自动进入指定项目目录,执行构建任务并运行仿真程序。整个过程无需复杂配置,适合大多数基于 Linux 的开发环境,尤其是使用 Ubuntu 系统的开发者。
我们将以实际场景为例——你有一个位于/home/user/mywbc_v5_usb/build的项目,希望开机后自动执行./sim/sim启动仿真。最终效果是:按下电源键,系统启动完成后,仿真进程已经运行,日志文件已生成,一切准备就绪。
1. 创建自动化执行脚本
首先,我们需要编写一个 Shell 脚本,用来封装所有需要在开机时执行的操作。这个脚本可以放在用户文档目录下,便于管理。
1.1 创建脚本文件
建议创建一个专门存放脚本的目录,例如:
mkdir -p /home/user/Documents/scripts然后创建脚本文件:
nano /home/user/Documents/scripts/auto_run_test.sh输入以下内容:
#!/bin/bash # 记录启动开始 echo "System startup initiated" > /home/user/Documents/scripts/output.txt # 进入项目构建目录 cd /home/user/mywbc_v5_usb/build || { echo "Failed to enter build directory" >> /home/user/Documents/scripts/output.txt exit 1 } echo "Entered build directory successfully" >> /home/user/Documents/scripts/output.txt # 执行仿真程序 ./sim/sim & echo "Simulation process started" >> /home/user/Documents/scripts/output.txt1.2 脚本说明
#!/bin/bash:声明使用 Bash 解释器。cd /home/user/mywbc_v5_usb/build:切换到你的项目 build 目录,请根据实际情况修改路径。|| { ... }:如果切换失败,输出错误信息并退出。./sim/sim &:后台运行仿真程序,避免阻塞后续操作。- 日志写入
output.txt,方便调试是否成功执行。
保存并退出编辑器(Ctrl+O → Enter → Ctrl+X)。
2. 设置脚本可执行权限
Linux 默认不允许随意执行脚本,必须显式赋予执行权限。
运行以下命令:
sudo chmod +x /home/user/Documents/scripts/auto_run_test.sh提示:相比
chmod 777,+x更安全且符合最小权限原则。
验证是否生效:
ls -l /home/user/Documents/scripts/auto_run_test.sh应看到类似-rwxr-xr-x权限标识。
3. 配置开机启动方式(推荐使用 rc.local)
Ubuntu 16.04 及部分旧版本支持rc.local机制,它会在多用户模式结束时执行一次,非常适合一次性初始化任务。
3.1 检查 rc.local 是否存在
ls /etc/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. exit 0保存后设置可执行权限:
sudo chmod +x /etc/rc.local3.2 修改 rc.local 内容
打开文件进行编辑:
sudo nano /etc/rc.local在exit 0之前添加如下内容:
# Start custom auto-run script cd /home/user/Documents/scripts && sh auto_run_test.sh || echo "Auto-run script failed" >> /home/user/Documents/scripts/output.txt完整示例:
#!/bin/sh -e cd /home/user/Documents/scripts && sh auto_run_test.sh || echo "Auto-run script failed" >> /home/user/Documents/scripts/output.txt exit 0注意:
- 使用
sh而非sudo sh,因为rc.local本身以 root 权限运行。- 添加错误捕获逻辑,确保问题可追踪。
4. 替代方案:适用于无 rc.local 的新版本 Ubuntu
某些新版 Ubuntu(如 20.04+)默认不再启用rc.local,此时可通过修改/etc/profile实现类似效果。
4.1 编辑 profile 文件
sudo nano /etc/profile滚动到底部,在最后一行前加入:
# Auto-run simulation script on login if [ -f /home/user/Documents/scripts/auto_run_test.sh ]; then /bin/bash /home/user/Documents/scripts/auto_run_test.sh & fi4.2 区别说明
| 方式 | 触发时机 | 执行次数 | 用户上下文 |
|---|---|---|---|
rc.local | 系统启动时 | 仅一次 | root |
/etc/profile | 每次用户登录 shell | 每次登录一次 | 当前登录用户 |
建议选择:
- 若希望仅启动一次,用
rc.local- 若担心兼容性,可用
profile,但注意可能多次触发
5. 测试与验证流程
完成配置后,必须通过重启来验证是否真正生效。
5.1 重启系统
sudo reboot等待系统完全启动。
5.2 检查输出日志
登录后查看日志文件:
cat /home/user/Documents/scripts/output.txt预期输出:
System startup initiated Entered build directory successfully Simulation process started5.3 验证仿真进程是否运行
使用ps查看进程:
ps aux | grep sim/sim若能看到相关进程,则说明启动成功。
5.4 排查常见问题
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| output.txt 未生成 | 路径错误或权限不足 | 检查脚本路径、确保目录存在且可写 |
| cd 失败 | 路径拼写错误或目录未挂载 | 使用绝对路径,确认项目目录存在 |
| sim 程序未运行 | 命令被阻塞或前台运行 | 改为./sim/sim &后台运行 |
| 脚本无输出但系统正常 | rc.local 未启用 | 检查systemctl status rc-local.service |
| 多次重复执行 | 使用了 profile 导致每次登录都跑 | 改用 rc.local 或加锁机制防止重复 |
6. 进阶优化建议
虽然基础功能已实现,但在真实开发中,我们还可以进一步提升稳定性和实用性。
6.1 添加进程守护机制
防止仿真程序意外退出,可在脚本中加入循环检测:
while true; do if ! pgrep -f "./sim/sim" > /dev/null; then echo "$(date): Restarting simulation..." >> output.txt ./sim/sim & fi sleep 10 done6.2 使用 systemd 服务(更现代的做法)
对于追求规范化的团队,推荐使用systemd替代rc.local。
创建服务文件:
sudo nano /etc/systemd/system/sim-startup.service内容如下:
[Unit] Description=Auto start simulation after boot After=multi-user.target [Service] Type=simple User=user ExecStart=/bin/bash /home/user/Documents/scripts/auto_run_test.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reexec sudo systemctl enable sim-startup.service sudo systemctl start sim-startup.service优势:
- 更好的日志管理(
journalctl -u sim-startup.service) - 自动重启支持
- 标准化部署,易于维护
7. 总结
7.1 核心要点回顾
本文详细介绍了如何实现“开机自动执行 build 和 sim 命令”的完整方案,帮助开发者摆脱重复劳动,提升工作效率。主要步骤包括:
- 编写自动化脚本:封装
cd、./sim/sim等操作,并记录日志; - 设置执行权限:使用
chmod +x赋予脚本可执行能力; - 配置开机启动:
- 推荐使用
rc.local实现系统级单次启动; - 兼容方案使用
/etc/profile实现登录时触发;
- 推荐使用
- 验证执行结果:通过日志和进程检查确认仿真已运行;
- 进阶优化:引入
systemd服务或守护进程,增强稳定性。
8. 下一步建议
- 将该脚本纳入版本控制,与项目代码一同管理;
- 结合 CI/CD 工具,实现全自动部署与仿真;
- 在团队内部推广此实践,统一开发环境初始化流程;
- 探索图形化界面自动启动工具(如
gnome-session-properties),适合非技术用户。
掌握这项技能后,你会发现:每天节省下来的几分钟,长期积累下来就是巨大的时间红利。更重要的是,自动化带来的确定性和一致性,能显著减少人为失误,让你更专注于核心开发工作。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。