2026/4/15 16:00:27
网站建设
项目流程
网站速度慢的原因,中山智能设备网站建设,开发公司成本如何管控,阿里云wordpress数据库测试开机启动脚本使用心得#xff1a;稳定可靠易部署
在实际项目开发和系统运维过程中#xff0c;经常会遇到需要让某些服务或任务在系统启动时自动运行的需求。比如自定义监控脚本、后台服务初始化、硬件设备检测等场景。如果每次重启后都要手动执行命令#xff0c;不仅效…测试开机启动脚本使用心得稳定可靠易部署在实际项目开发和系统运维过程中经常会遇到需要让某些服务或任务在系统启动时自动运行的需求。比如自定义监控脚本、后台服务初始化、硬件设备检测等场景。如果每次重启后都要手动执行命令不仅效率低下还容易遗漏关键步骤。最近我在使用“测试开机启动脚本”这一镜像环境时深入实践了Linux系统下的开机自启方案结合Ubuntu系统的特性总结出一套稳定、可靠、易部署的脚本启动方法。本文将从实际操作出发手把手带你完成整个流程并分享我在部署过程中的真实体验与优化建议。1. 明确目标我们想实现什么在开始之前先明确我们的核心需求编写一个自定义的Shell脚本.sh文件让这个脚本在每次系统开机时自动执行脚本能正确访问指定路径、运行程序并输出日志整个方案要稳定不因系统更新而失效部署方式简单适合批量复制到多台设备这正是“测试开机启动脚本”镜像所要验证的核心功能。接下来我会基于Ubuntu类系统如18.04及以上版本进行说明但大部分逻辑也适用于其他Debian系发行版。2. 创建自定义启动脚本第一步是编写我们要自动运行的Shell脚本。选择一个合适的存放位置非常重要推荐放在用户主目录下的专用脚本文件夹中便于管理。2.1 建立脚本目录与文件mkdir -p ~/scripts nano ~/scripts/auto_run_test.sh然后输入以下内容#!/bin/bash # 输出启动标记 echo helloStartup ~/scripts/output.txt # 进入目标工程目录 cd /home/user/mywbc_v5_usb/build || exit 1 echo EnterBuildDir ~/scripts/output.txt # 启动模拟程序 ./sim/sim # 标记执行完成 echo AfterSim ~/scripts/outputend.txt2.2 关键细节说明#!/bin/bash声明解释器必须写在第一行而不是追加写入日志避免覆盖前面的日志信息符号让sim程序以后台模式运行防止阻塞系统启动|| exit 1增强健壮性若目录不存在则退出脚本保存并退出编辑器CtrlO → Enter → CtrlX。3. 设置脚本可执行权限Linux默认不会执行没有权限的脚本。我们需要赋予它执行权限chmod x ~/scripts/auto_run_test.sh也可以使用更宽松的权限如参考文档中的777但在生产环境中建议最小化权限原则sudo chmod 755 ~/scripts/auto_run_test.sh此时你可以手动测试一下脚本是否能正常运行~/scripts/auto_run_test.sh cat ~/scripts/output.txt确保能看到helloStartup和EnterBuildDir的输出说明脚本本身没问题。4. 利用 rc.local 实现开机自启经典可靠方案Ubuntu早期版本广泛使用的rc.local是最简单且兼容性强的开机启动方式之一。虽然新版本系统逐渐转向 systemd但通过适当配置仍可完美支持。4.1 检查 rc.local 是否存在ls /etc/rc.local如果提示文件不存在需要手动创建。4.2 创建并编辑 rc.local 文件sudo nano /etc/rc.local填入以下内容#!/bin/sh -e # 开机自启脚本入口 cd /home/user/scripts sudo sh auto_run_test.sh # 必须以 exit 0 结尾 exit 0注意这里的/home/user/scripts需根据实际用户名调整路径。4.3 设置 rc.local 可执行为了让系统识别并执行该脚本必须设置其权限并启用服务sudo chmod x /etc/rc.local对于使用 systemd 的系统Ubuntu 16.04还需确保rc-local.service已启用sudo systemctl enable rc-local sudo systemctl start rc-local查看状态确认是否成功sudo systemctl status rc-local如果看到active (exited)表示已正常加载。5. 替代方案写入 /etc/profile适用于桌面环境如果你发现rc.local不生效或者使用的是某些精简版系统如部分云镜像或容器环境可以考虑将命令追加到全局环境配置文件中。5.1 修改 profile 文件sudo nano /etc/profile在文件末尾添加# 自动运行测试脚本 if [ -f /home/user/scripts/auto_run_test.sh ]; then sh /home/user/scripts/auto_run_test.sh fi这种方式的优点是几乎所有Linux系统都支持/etc/profile用户登录时自动触发适合带GUI的应用缺点也很明显只有用户登录后才会执行多用户环境下可能重复执行不适合无界面的服务器场景因此仅作为备用方案推荐。6. 实际测试与结果验证一切配置完成后最关键的一步来了重启系统sudo reboot等待系统重新启动后检查日志文件是否存在且内容完整cat ~/scripts/output.txt cat ~/scripts/outputend.txt预期输出应包含helloStartup EnterBuildDir AfterSim同时可以用ps命令查看sim进程是否正在运行ps aux | grep sim如果能看到进程存在说明脚本已成功启动目标程序。7. 常见问题与解决方案在实际部署过程中我遇到了几个典型问题这里一并分享解决方法。7.1 脚本路径错误导致找不到文件现象日志为空或提示“no such file or directory”原因rc.local是以 root 身份运行的工作目录不一定是你期望的路径。解决方案在脚本中使用绝对路径或显式切换目录cd $(dirname $0) # 切换到脚本所在目录或者直接在rc.local中指定完整路径su - user -c sh /home/user/scripts/auto_run_test.sh这样可以以特定用户身份运行脚本避免权限问题。7.2 程序启动太快导致依赖未就绪现象./sim/sim报错无法连接设备或共享库缺失原因系统刚启动时USB设备、网络、挂载点等尚未准备就绪。解决方案加入短暂延迟或等待机制sleep 5 until ping -c1 google.com /dev/null; do sleep 1; done # 等待网络或者循环检测关键设备是否存在while [ ! -d /home/user/mywbc_v5_usb/build ]; do sleep 1 done7.3 日志文件权限不足现象脚本能运行但日志写不进去原因root运行脚本试图写普通用户的家目录解决方案要么改用用户身份运行要么将日志写入公共目录echo helloStartup /tmp/startup.log或者修改目标目录权限chmod 777 ~/scripts/仅用于调试生产环境慎用8. 进阶建议提升稳定性与可维护性经过多次部署测试我发现以下几个小技巧能让整个方案更加稳健。8.1 添加时间戳记录启动时刻在脚本开头加入时间记录方便排查问题echo [$(date %Y-%m-%d %H:%M:%S)] System boot script started ~/scripts/boot.log8.2 使用 nohup 防止被中断即使在后台运行某些情况下进程仍可能被终止。使用nohup更安全nohup ./sim/sim /tmp/sim.log 21 8.3 加入守护判断防止重复启动防止脚本被多次调用导致多个实例冲突LOCKFILE/tmp/auto_run_test.lock if [ -f $LOCKFILE ]; then echo Script already running exit 1 fi touch $LOCKFILE # ... 主逻辑 ... rm -f $LOCKFILE8.4 统一管理多个启动任务如果有多个脚本需要开机运行建议统一放在/opt/boot-scripts/目录下并由一个主控脚本调度# /opt/boot-scripts/main.sh for script in /opt/boot-scripts/*.sh; do [ -x $script ] $script done然后只在rc.local中调用这一个主脚本结构更清晰。9. 总结为什么这套方案值得推荐经过反复验证“测试开机启动脚本”镜像所体现的这套基于rc.local的启动机制具备以下几个显著优势9.1 稳定性高rc.local是传统Unix/Linux的标准组件之一即使系统升级只要保留兼容层就能继续使用执行时机在系统基本服务启动之后资源可用性高9.2 部署简单不需要编写复杂的systemd unit文件脚本结构清晰易于理解和维护支持快速复制到多台设备适合嵌入式或边缘计算场景9.3 兼容性强适用于Ubuntu 16.04 ~ 22.04等多个版本在树莓派、NVIDIA Jetson、工业PC等设备上均可运行可与其他自动化工具Ansible、SaltStack集成9.4 易于调试日志输出直观便于定位问题可随时手动执行脚本进行测试错误反馈明确无需深入systemd日志系统获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。