测试开机启动脚本镜像部署全记录,新手可复制

测试开机启动脚本镜像部署全记录,新手可复制

1. 前言:为什么需要开机自启脚本?

你有没有遇到过这样的情况:每次重启设备后,都要手动运行一堆服务、脚本或环境配置?比如启动一个监控程序、挂载网络存储、或者初始化某个AI模型服务。重复操作不仅麻烦,还容易遗漏。

这时候,开机自动执行脚本就成了刚需。特别是在嵌入式系统、边缘计算设备、或者定制化Linux镜像中,自动化初始化流程是提升稳定性和运维效率的关键。

本文将带你完整走一遍“测试开机启动脚本”这个镜像的部署过程。内容基于真实可运行的Linux启动机制,步骤清晰、逻辑明确,新手也能一步步照着操作,直接复用到自己的项目中

不需要高深的系统知识,只要你会基本的Linux命令和文件编辑,就能搞定。

2. 理解Linux开机启动流程

在动手写脚本之前,先搞清楚系统是怎么一步步“醒过来”的。这能帮你避免踩坑——比如把脚本放错了位置,结果发现根本没执行。

2.1 启动链路:从内核到用户空间

典型的嵌入式Linux系统(如使用BusyBox的环境)启动顺序如下:

linuxrc (指向 busybox) → /etc/inittab → /etc/init.d/rcS → /etc/init.d/Sxx*

我们来拆解一下每个环节的作用:

  • linuxrc:通常是软链接,指向busybox,它是系统第一个用户态进程(PID=1),负责初始化基础环境。
  • /etc/inittab:定义系统初始化行为,告诉init进程该做什么,比如运行哪个启动脚本。
  • /etc/init.d/rcS:系统级启动脚本,通常由inittab调用,用于执行开机时的核心初始化任务。
  • /etc/init.d/Sxx*:以S开头、后跟数字编号的脚本(如S10network,S99myscript),按序号从小到大自动执行,常用于启动服务。

关键提示:如果你想让某个脚本开机自动运行,最稳妥的方式就是把它放进/etc/init.d/并命名为Sxx_yourname,同时确保有可执行权限。

2.2 哪些地方可以加自启命令?

根据上面的流程,常见的添加方式有四种:

  1. 修改/etc/inittab:直接添加一条::sysinit:指令,调用你的脚本。
  2. 追加到/etc/init.d/rcS:在脚本末尾加上你要执行的命令。
  3. 创建Sxx脚本放入/etc/init.d/:推荐做法,模块化管理,便于维护。
  4. 直接在rcSinittab中写命令:适合简单指令,但不利于后期调整。

2.3 特别注意:/etc/profile不适合开机自启

很多人会误以为/etc/profile是开机就执行的万能入口,其实不然。

  • /etc/profile只有在用户登录 shell 时才会执行
  • 如果你是无人值守设备(比如服务器后台运行、嵌入式终端无登录),它根本不会被触发。
  • 所以,不要把需要开机即运行的服务放在这里

它的正确用途是设置全局环境变量,比如PATHLANG等,方便用户登录后使用。


3. 实战部署:一步步配置开机启动脚本

现在进入正题。假设你已经拿到了名为“测试开机启动脚本”的镜像,我们要做的就是验证并完善它的自启功能。

3.1 登录系统并检查当前启动配置

首先,通过SSH或串口登录设备,进入shell环境。

查看当前的inittab内容:

cat /etc/inittab

典型输出可能类似:

::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty 115200 ttyS0

重点关注第一行:::sysinit:/etc/init.d/rcS,这意味着系统会在初始化阶段执行rcS脚本。

3.2 查看rcS脚本内容

接着看rcS做了什么:

cat /etc/init.d/rcS

常见内容包括:

#!/bin/sh echo "Starting system initialization..." mount -a /sbin/swapon -a /etc/init.d/S10udev start /etc/init.d/S40network start

你会发现它已经在调用一系列Sxx脚本了。说明这是一个标准的启动结构。

3.3 创建我们的测试脚本

我们现在要添加一个简单的测试脚本,验证是否能成功开机执行。

步骤一:编写脚本

创建文件/etc/init.d/S99_test_boot.sh

vi /etc/init.d/S99_test_boot.sh

输入以下内容:

#!/bin/sh echo "----------------------------------------" >> /tmp/boot.log echo "【开机自启测试】脚本执行时间: $(date)" >> /tmp/boot.log echo "主机名: $(hostname)" >> /tmp/boot.log echo "IP地址: $(ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)" >> /tmp/boot.log echo "自定义任务已完成" >> /tmp/boot.log

这个脚本做了几件事:

  • 记录执行时间
  • 写入主机名和IP
  • 输出完成标志
  • 所有信息保存在/tmp/boot.log,方便后续查看
步骤二:赋予可执行权限
chmod +x /etc/init.d/S99_test_boot.sh

重要:没有执行权限的脚本是不会被运行的!

3.4 验证脚本是否会自动执行

此时还不确定系统会不会执行它,因为我们只是放进了init.d,但没人调用它。

有两种方式让它生效:

方式一:手动追加到rcS(快速验证)

编辑rcS文件,在最后加上一行:

/etc/init.d/S99_test_boot.sh

保存退出。

然后重启:

reboot

重启完成后,再次登录,查看日志:

cat /tmp/boot.log

如果看到类似输出:

---------------------------------------- 【开机自启测试】脚本执行时间: Mon Apr 5 10:23:45 UTC 2025 主机名: mydevice IP地址: 192.168.1.100 自定义任务已完成

恭喜!你的脚本已经成功在开机时执行了。

方式二:依赖启动目录自动扫描(更规范)

有些系统会自动遍历/etc/init.d/下所有Sxx*脚本并执行。如果你的系统支持这种机制(可通过查看rcS是否包含循环语句判断),那就不需要手动添加调用,只要命名正确即可。

例如,在rcS中可能会看到:

for script in /etc/init.d/S[0-9]*; do if [ -x "$script" ]; then $script start fi done

只要有这段代码,所有符合命名规则的脚本都会自动运行。


4. 常见问题与排查技巧

即使按照步骤操作,也可能会遇到脚本没执行的情况。别急,下面是一些高频问题和解决方法。

4.1 脚本没执行?先查这几点

检查项检查方法正确状态
文件是否存在ls /etc/init.d/S99_test_boot.sh显示文件名
是否有执行权限ls -l /etc/init.d/S99_test_boot.sh包含x权限位
脚本是否被调用grep S99_test /etc/init.d/rcS能搜到调用语句
日志路径是否可写touch /tmp/test.log成功创建文件

4.2 日志看不到?试试这些替代方案

有时候/tmp分区太小或未挂载,导致日志写不进去。可以换其他位置:

# 改用根目录下的日志文件 echo "测试消息" >> /root/boot_test.log

或者使用logger命令写入系统日志(如果有syslog服务):

logger "开机脚本 S99_test_boot 已执行"

然后用dmesglogread查看。

4.3 脚本执行顺序很重要

如果你的脚本依赖网络或挂载点,一定要注意命名中的数字顺序。

比如:

  • S10network:配置网络
  • S80mount_nfs:挂载NFS共享
  • S99myapp:启动应用

如果S99myapp在网络还没起来时就运行,肯定会失败。

建议:给关键依赖留出足够间隔,比如从S90开始留给自定义脚本。


5. 进阶技巧:让开机脚本更实用

光打印日志只是第一步。真正有价值的开机脚本,应该是能完成实际任务的。

5.1 自动启动Python服务

假设你想让树莓派开机运行一个Flask API服务:

#!/bin/sh sleep 10 # 等待网络稳定 cd /home/pi/myapi && python3 app.py > /tmp/flask.log 2>&1 &

记得加上&放入后台,否则会阻塞后续启动流程。

5.2 检测硬件并动态配置

#!/bin/sh # 根据MAC地址前缀设置不同主机名 mac=$(cat /sys/class/net/eth0/address) case $mac in "b8:27:eb"*) hostnamectl set-hostname pi-node-01 ;; "dc:a6:32"*) hostnamectl set-hostname pi-node-02 ;; esac

适用于批量部署场景。

5.3 添加错误重试机制

对于关键任务,可以加简单重试:

#!/bin/sh for i in 1 2 3 4 5; do ping -c1 google.com && break sleep 5 done if ! ping -c1 google.com; then echo "网络无法连接,跳过后续依赖任务" >> /tmp/boot.log exit 1 fi

6. 总结:掌握开机启动的核心逻辑

6.1 关键要点回顾

本文带你完整实践了“测试开机启动脚本”镜像的部署流程,核心收获包括:

  • 理解了Linux启动链条inittab → rcS → Sxx是大多数嵌入式系统的标准路径。
  • 学会了两种添加方式:修改rcS直接调用,或放入init.d利用自动扫描。
  • 避开了常见误区/etc/profile不适合无人值守场景。
  • 掌握了调试方法:通过日志、权限、调用关系逐层排查。
  • 拓展了实用场景:从日志记录到服务启动,再到动态配置。

6.2 给新手的建议

  • 先跑通最小例子:哪怕只是输出一句话到日志,也要先让它成功执行。
  • 命名规范很重要S99_开头保证较晚执行,减少依赖冲突。
  • 永远记得加执行权限chmod +x是最容易忘记却最关键的一步。
  • 多用/tmp/boot.log调试:这是你最忠实的“开机见证者”。

6.3 下一步你可以尝试

  • 把AI模型加载脚本设为开机启动
  • 自动同步时间(NTP)
  • 启动Web服务器或MQTT客户端
  • 定时任务配合cron实现持久化服务

只要掌握了这套机制,你就能打造出真正“开机即用”的智能设备。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1193051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Joy-Con Toolkit免费终极指南:轻松解决手柄问题的完整方案

Joy-Con Toolkit免费终极指南:轻松解决手柄问题的完整方案 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit 还在为Switch手柄的各种使用问题而烦恼吗?Joy-Con Toolkit这款完全免费的开源工…

如何快速迁移输入法词库:深蓝转换工具完整指南

如何快速迁移输入法词库:深蓝转换工具完整指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为更换输入法时无法保留个人词库而烦恼吗?…

MGeo镜像部署常见问题汇总:单卡4090D运行报错解决方案

MGeo镜像部署常见问题汇总:单卡4090D运行报错解决方案 1. 背景与使用场景 MGeo是阿里开源的一款专注于中文地址领域实体对齐的模型,主要用于解决“地址相似度匹配”这一实际业务难题。在电商、物流、本地生活等场景中,常常需要判断两条地址…

YOLOv9 Docker部署:容器化封装最佳实践

YOLOv9 Docker部署:容器化封装最佳实践 在深度学习模型的开发与部署过程中,环境配置常常成为效率瓶颈。YOLOv9作为当前目标检测领域表现优异的模型之一,其依赖复杂、安装繁琐的问题尤为突出。为解决这一痛点,我们推出了基于官方代…

猫抓插件使用指南:5分钟掌握网页资源下载技巧

猫抓插件使用指南:5分钟掌握网页资源下载技巧 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法保存网页视频而烦恼吗?每次看到精彩的在线内容,却只能望洋…

突破Windows远程桌面限制:RDP Wrapper完全配置指南

突破Windows远程桌面限制:RDP Wrapper完全配置指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾经因为Windows系统的远程桌面功能限制而感到困扰?特别是当家庭版或专业版系统只允…

小红书数据采集完整指南:从零开始掌握Python爬虫工具

小红书数据采集完整指南:从零开始掌握Python爬虫工具 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 想要高效获取小红书平台的公开数据资源吗?xhs这…

3大惊艳功能解密:Cowabunga Lite如何让iOS个性化定制变得如此轻松

3大惊艳功能解密:Cowabunga Lite如何让iOS个性化定制变得如此轻松 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 还在为iPhone界面千篇一律而烦恼吗?想打造真正属于自…

Z-Image-ComfyUI快速上手:三步完成首张AI图像生成

Z-Image-ComfyUI快速上手:三步完成首张AI图像生成 Z-Image-ComfyUI 是一个集成了阿里最新开源文生图大模型 Z-Image 的可视化推理环境,基于 ComfyUI 搭建,专为高效图像生成设计。它将强大的生成能力与直观的操作界面结合,让开发者…

工业质检实战:用YOLOv10镜像快速搭建缺陷检测系统

工业质检实战:用YOLOv10镜像快速搭建缺陷检测系统 在现代智能制造场景中,产品质量控制正从传统人工目检向自动化视觉检测加速转型。尤其是在PCB板、金属件、玻璃面板等高精度制造领域,微小划痕、焊点虚焊、元件错位等缺陷往往肉眼难辨&#…

小红书数据采集完整指南:如何快速上手Python爬虫工具

小红书数据采集完整指南:如何快速上手Python爬虫工具 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 想要高效获取小红书平台的公开数据吗?xhs这款强…

Open-AutoGLM远程开发指南:跨网络设备控制实战

Open-AutoGLM远程开发指南:跨网络设备控制实战 1. Open-AutoGLM:手机端AI Agent的全新打开方式 你有没有想过,让AI直接帮你操作手机?不是简单的语音助手,而是真正“看得懂”屏幕、“想得清楚”下一步、“动得了手”完…

中小企业AI落地:Glyph低成本视觉推理部署案例

中小企业AI落地:Glyph低成本视觉推理部署案例 在当前人工智能技术快速发展的背景下,越来越多的中小企业开始关注如何将大模型技术真正“用起来”。然而,高昂的算力成本、复杂的部署流程以及对专业团队的依赖,常常让这些企业望而却…

小红书下载神器:3分钟掌握免费无水印批量下载技巧

小红书下载神器:3分钟掌握免费无水印批量下载技巧 【免费下载链接】XHS-Downloader 免费;轻量;开源,基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader 想…

RDP Wrapper完整教程:免费解锁Windows多用户远程桌面

RDP Wrapper完整教程:免费解锁Windows多用户远程桌面 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows系统只能单用户远程连接而苦恼吗?RDP Wrapper Library为你提供了完美的解…

cv_resnet18_ocr-detection启动失败?服务排查步骤详解

cv_resnet18_ocr-detection启动失败?服务排查步骤详解 1. 问题背景与常见现象 你是不是也遇到过这样的情况:刚部署完 cv_resnet18_ocr-detection OCR文字检测模型,满怀期待地运行 bash start_app.sh,结果服务没起来,…

如何轻松解锁付费内容:7个高效工具的完整指南

如何轻松解锁付费内容:7个高效工具的完整指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否经常遇到这样的情况:找到一篇很有价值的技术文章&#xff…

如何用RDP Wrapper突破Windows远程桌面限制:从入门到精通

如何用RDP Wrapper突破Windows远程桌面限制:从入门到精通 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法实现多用户远程桌面而烦恼吗?🤔 RDP Wrapper L…

如何用Hanime1Plugin打造影院级Android观影体验?

如何用Hanime1Plugin打造影院级Android观影体验? 【免费下载链接】Hanime1Plugin Android插件(https://hanime1.me) (NSFW) 项目地址: https://gitcode.com/gh_mirrors/ha/Hanime1Plugin 还在为手机观影的各种不便而烦恼吗?想要获得媲美专业播放器…

Hunyuan-MT-7B部署全攻略:涵盖所有常见问题解决方法

Hunyuan-MT-7B部署全攻略:涵盖所有常见问题解决方法 1. 模型简介与核心优势 1.1 腾讯混元最强翻译模型登场 Hunyuan-MT-7B 是腾讯开源的70亿参数多语言翻译大模型,专为高质量跨语言互译设计。它不仅支持中文与英语、日语、法语、西班牙语、葡萄牙语等…