从虚拟机到树莓派,测试开机脚本通吃多场景

从虚拟机到树莓派,测试开机脚本通吃多场景

你有没有遇到过这样的情况:每次重启服务器或开发板,都要手动启动一堆服务?比如你的树莓派上跑着一个监控程序,或者虚拟机里部署了一个后台应用,结果一断电、一重启,全得重新登录上去一个个拉起来。不仅麻烦,还容易遗漏。

今天这篇文章就是为了解决这个问题——让脚本在系统开机时自动运行。我们不讲虚的,直接上手实战。通过一个通用性强、适配度高的“开机启动脚本”方案,带你搞定从Ubuntu 虚拟机树莓派4B的跨平台自启配置。

无论你是做嵌入式开发、自动化运维,还是搭建个人小项目,这套方法都能用得上。全程小白友好,代码可复制,步骤清晰,保证你照着做一遍就能成功。


1. 开机自启到底有什么用?

先别急着敲命令,咱们先搞清楚:为什么非得让系统自己启动程序?

想象这几个场景:

  • 你在树莓派上接了个摄像头做门禁识别,重启后发现程序没跑,门口的人进不来。
  • 你用虚拟机搭了个本地API服务,每次开机都要手动进终端执行python app.py
  • 家里的NAS设备重启了,下载任务、同步脚本全都停了,得人去点一下才恢复。

这些问题的本质,都是缺乏自动化

而开机自启的作用,就是让你的关键任务像“系统自带功能”一样,在每次开机时自动唤醒,无需人工干预。它带来的好处很实在:

  • 省时间:不用每次登录都手动启动服务
  • 提稳定性:避免因忘记启动导致服务中断
  • 真·无人值守:哪怕远程设备断电重启,也能自己恢复正常工作

接下来我们就用最实用的方式,把这件事干成。


2. Linux常见的开机自启方式对比

Linux下实现开机自启的方法不止一种,各有适用场景。我们挑三种最常用、兼容性最好的来分析:

2.1 rc.local 方案(推荐新手)

这是最经典也最直观的方式。/etc/rc.local是一个脚本文件,系统在完成基本初始化后会自动执行它里面的内容。

优点

  • 写法简单,就是个 Shell 脚本
  • 执行时机晚,网络、文件系统等都已经准备好了
  • 兼容老版本和新版本 Ubuntu、Debian、树莓派OS等

缺点

  • Ubuntu 16.04 之后默认不再启用该服务
  • 需要手动激活 systemd 中的rc-local.service

适合人群:刚接触 Linux 自启机制的新手,尤其是使用树莓派或老旧系统的用户。


2.2 systemd 服务方案(现代标准)

systemd 是目前主流 Linux 发行版的初始化系统,几乎所有新系统都基于它管理服务。

你可以创建一个.service文件,定义你的程序如何启动、何时启动、失败是否重试等。

优点

  • 功能强大,支持日志追踪、依赖控制、自动重启
  • 系统级管理,权限高、稳定性好
  • 支持开机即运行,不依赖用户登录

缺点

  • 配置稍复杂,需要写 service 文件
  • 对初学者有一定门槛

适合人群:有一定 Linux 基础,追求稳定性和专业性的开发者。


2.3 init.d 脚本方案(已逐渐淘汰)

这是更早期的 SysVinit 启动方式,通过/etc/init.d/目录下的脚本配合update-rc.d来注册服务。

现状

  • 在基于 systemd 的系统中已被取代
  • 维护成本高,语法繁琐
  • 不建议新项目使用

结论:除非维护旧系统,否则跳过。


3. 实战一:Ubuntu虚拟机中的开机自启配置

我们以最常见的 Ubuntu 18.04 虚拟机为例,演示如何恢复并启用rc.local实现开机脚本运行。

3.1 检查是否存在 rc-local.service

首先确认系统是否保留了这个服务单元:

ls /lib/systemd/system | grep rc-local

如果看到输出rc-local.service,说明文件存在,可以继续。

如果没有,可能需要手动创建(一般不会出现)。


3.2 修改 rc-local.service 文件

Ubuntu 18.04 默认的rc-local.service缺少[Install]段,导致无法启用。我们需要补上。

先修改权限以便编辑:

sudo chmod 777 /lib/systemd/system/rc-local.service

然后打开编辑:

sudo vim /lib/systemd/system/rc-local.service

确保内容包含以下关键部分:

[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 Alias=rc-local.service

重点是[Install]段中的WantedBy=multi-user.target,这决定了它会在多用户模式下启动。


3.3 创建 /etc/rc.local 脚本

检查是否存在该文件:

sudo touch /etc/rc.local sudo chmod 777 /etc/rc.local sudo vim /etc/rc.local

写入如下内容作为测试:

#!/bin/bash # 开机自启测试脚本 echo "System boot time: $(date)" >> /home/ubuntu/boot.log echo "Hostname: $(hostname)" >> /home/ubuntu/boot.log exit 0

注意:

  • 最后一定要有exit 0,否则系统可能会卡住
  • 如果执行的是长期运行的程序(如 Python 服务),记得加&放入后台,例如:python3 /path/to/app.py &

保存退出。


3.4 建立软链接并启用服务

有些系统需要将服务文件链接到系统目录:

sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

然后启用并启动服务:

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

查看状态验证是否成功:

sudo systemctl status rc-local

如果显示active (exited),说明已正常运行。


3.5 验证效果

重启系统:

sudo reboot

再次登录后检查/home/ubuntu/boot.log是否生成,并且内容包含时间和主机名:

cat /home/ubuntu/boot.log

你应该能看到类似:

System boot time: Mon Apr 5 10:23:15 CST 2025 Hostname: ubuntu-virtual-machine

这就证明你的脚本已经成功在每次开机时自动执行!


4. 实战二:树莓派4B上的开机播报脚本

现在我们换到真实硬件环境——树莓派4B,来做一个更有意思的例子:系统启动时用语音播报欢迎语

这个案例不仅能验证自启功能,还能展示实际应用场景。

4.1 安装 espeak 语音合成工具

espeak 是一个轻量级的文本转语音工具,非常适合树莓派这类资源有限的设备。

安装命令:

sudo apt-get update sudo apt-get install espeak -y

测试语音是否正常:

espeak "Hello, this is Raspberry Pi"

如果你接了扬声器或耳机,应该能听到声音。


4.2 编写 Python 播报脚本

进入家目录,创建脚本:

cd /home/pi nano speak_on_boot.py

输入以下代码:

#!/usr/bin/env python import subprocess # 要播报的内容 message = "Welcome to the world of Raspberry Pi" # 调用 espeak 播放 subprocess.call(['espeak "{}" 2>/dev/null'.format(message)], shell=True)

保存并赋予可执行权限:

chmod +x speak_on_boot.py

手动运行测试:

python speak_on_boot.py

听到播报即表示脚本无误。


4.3 配置 rc.local 实现自启

树莓派官方系统(Raspberry Pi OS)默认仍支持rc.local,非常方便。

编辑文件:

sudo nano /etc/rc.local

exit 0之前添加一行:

python /home/pi/speak_on_boot.py &

完整示例:

#!/bin/sh -e # # rc.local # # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP is %s\n" "$_IP" fi # 添加我们的语音脚本 python /home/pi/speak_on_boot.py & exit 0

注意事项:

  • &是为了让脚本后台运行,防止阻塞系统启动
  • 不要用绝对路径调用python3,除非确定环境变量已加载(建议用python或完整路径/usr/bin/python

4.4 重启验证语音播报

保存后重启树莓派:

sudo reboot

等待几秒,你应该会听到清晰的英文播报:“Welcome to the world of Raspberry Pi”。

成功!这意味着你的树莓派现在已经具备“智能开机”能力。


5. 常见问题与避坑指南

虽然整体流程不难,但实际操作中很容易踩一些“隐形坑”。以下是高频问题汇总:

5.1 系统卡在启动界面

原因:脚本没有放入后台,或缺少exit 0

解决办法:

  • 所有长时间运行的命令后面加&
  • 确保/etc/rc.local最后一行是exit 0
  • 避免在脚本中使用交互式命令(如read

5.2 脚本路径写错或权限不足

常见错误写法:

python myscript.py

如果当前路径不是脚本所在目录,就会失败。

正确做法:使用绝对路径

python /home/pi/myscript.py &

同时确保脚本有执行权限:

chmod +x /home/pi/myscript.py

5.3 依赖服务未就绪(如网络、GPIO)

比如你想在开机时上传数据到服务器,但网络还没连上,程序直接报错退出。

推荐做法:加延时或检测机制

sleep 10 python /home/pi/upload_data.py &

或者更优雅地判断网络是否可用:

while ! ping -c1 google.com &>/dev/null; do sleep 1 done python /home/pi/sync_to_cloud.py &

5.4 树莓派音频输出选择错误

如果你听不到声音,可能是音频输出走的是 HDMI 而不是 3.5mm 耳机口。

设置音频输出:

sudo raspi-config

选择System Options > Audio,然后指定输出设备。


6. 总结:一套脚本能跑遍虚拟机和树莓派吗?

答案是:完全可以!只要遵循几个原则

关键点说明
使用rc.local兼容性强,适用于大多数 Debian 系发行版
绝对路径避免因工作目录不同导致脚本找不到
后台运行所有长任务加&,防止阻塞启动
错误重定向可加上> /tmp/startup.log 2>&1记录日志
权限设置确保脚本和服务都有执行权限

这样一套配置下来,无论是你在 VMware 里的 Ubuntu 虚拟机,还是插着屏幕的树莓派4B,都可以用几乎相同的脚本实现开机自启。


获取更多AI镜像

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

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

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

相关文章

告别写作烦恼!Qwen3-4B-Instruct一键启动创作之旅

告别写作烦恼!Qwen3-4B-Instruct一键启动创作之旅 你是否曾为写一篇报告绞尽脑汁?是否在开发项目时卡在代码逻辑上迟迟无法推进?现在,这一切都有了更聪明的解决方式。基于阿里云最新发布的 Qwen/Qwen3-4B-Instruct 模型打造的“A…

Llama3-8B编程语言支持?Python代码生成案例

Llama3-8B编程语言支持?Python代码生成案例 1. Meta-Llama-3-8B-Instruct 模型简介 Meta-Llama-3-8B-Instruct 是 Meta 在 2024 年 4 月推出的开源大模型,属于 Llama 3 系列中的中等规模版本。它拥有 80 亿参数,经过指令微调,专…

电商客服AI实战:用gpt-oss-20b-WEBUI快速搭建系统

电商客服AI实战:用gpt-oss-20b-WEBUI快速搭建系统 在电商行业,客户咨询量大、问题重复度高、响应时效要求严格,传统人工客服面临成本高、效率低、服务质量不稳定等痛点。如今,借助开源大模型技术,企业可以快速构建一套…

3个高效部署镜像推荐:IQuest-Coder-V1指令模型开箱即用体验

3个高效部署镜像推荐:IQuest-Coder-V1指令模型开箱即用体验 你是不是也经常遇到这样的问题:想用最新的代码大模型做开发辅助,但光是环境配置就卡了一整天?下载权重慢、依赖冲突、显存不够、推理服务搭不起来……明明是来提升效率…

高效图像分割新姿势|SAM3大模型镜像支持英文Prompt快速推理

高效图像分割新姿势|SAM3大模型镜像支持英文Prompt快速推理 你是否还在为复杂的图像分割任务头疼?手动标注耗时费力,传统模型又受限于训练数据,难以应对“没见过”的物体。现在,这一切都有了更聪明的解法。 最近上线…

GPEN启动失败怎么办?run.sh脚本执行问题排查指南

GPEN启动失败怎么办?run.sh脚本执行问题排查指南 1. 为什么run.sh会启动失败?先搞清这三件事 GPEN图像肖像增强工具在本地部署后,最常遇到的不是效果不好,而是根本跑不起来——点开终端输入 /bin/bash /root/run.sh,…

cv_resnet18_ocr-detection实战案例:会议纪要扫描件识别流程

cv_resnet18_ocr-detection实战案例:会议纪要扫描件识别流程 1. 引言:为什么需要OCR检测模型处理会议纪要? 在日常办公中,会议纪要常常以纸质文档扫描件的形式存在。这些文件虽然便于归档和传递,但其中的文字内容无法…

Qwen3-14B在金融场景应用案例:风险报告生成部署实战

Qwen3-14B在金融场景应用案例:风险报告生成部署实战 1. 引言:为什么金融行业需要智能报告生成? 每天,金融机构要处理成百上千份市场数据、交易记录、合规文件和客户信息。传统方式下,撰写一份全面的风险评估报告可能…

5分钟上手Emotion2Vec+语音情感识别,科哥镜像一键部署

5分钟上手Emotion2Vec语音情感识别,科哥镜像一键部署 1. 快速入门:语音也能读懂情绪? 你有没有想过,一段简单的语音背后,其实藏着说话人的情绪密码?愤怒、快乐、悲伤、惊讶……这些情绪不仅能被听到&…

如何用Qwen2.5做代码生成?0.5B模型Python调用详细步骤

如何用Qwen2.5做代码生成?0.5B模型Python调用详细步骤 1. 为什么选择Qwen2.5-0.5B做代码生成? 你是不是也遇到过这样的场景:写个脚本卡在某个函数上,查文档太慢,搜答案又一堆不相关的?或者只是想快速生成…

SGLang部署遇瓶颈?CPU/GPU协同优化实战解决方案

SGLang部署遇瓶颈?CPU/GPU协同优化实战解决方案 1. 为什么你的SGLang推理效率上不去? 你是不是也遇到过这种情况:明明用上了最新的大模型,部署了SGLang这样的高性能推理框架,但实际跑起来吞吐量还是提不上去&#xf…

2026年靠谱的日本旅行景点接送网友推荐榜

日本作为全球热门旅游目的地,其交通网络的复杂程度常常让游客感到困扰。本文基于2026年用户评价数据、服务覆盖范围、价格透明度及安全记录等核心指标,筛选出5家值得信赖的景点接送服务提供商。其中,大连半岛天空商…

自动驾驶实战:用PETRV2模型快速搭建BEV感知系统

自动驾驶实战:用PETRV2模型快速搭建BEV感知系统 1. 引言:为什么选择PETRV2构建BEV感知? 在自动驾驶的感知系统中,如何从多个摄像头获取的信息中准确识别周围环境,是一个关键挑战。传统的前视图或单视角检测方法受限于…

轻量级TTS方案新选择|Supertonic镜像在边缘设备的应用

轻量级TTS方案新选择|Supertonic镜像在边缘设备的应用 1. 为什么边缘端需要轻量级TTS? 你有没有遇到过这样的场景:智能音箱响应迟缓、语音助手断断续续,或者工业设备在无网络环境下无法播报提示音?这些问题的背后&am…

Alpha蒙版单独保存!UNet高级功能详解

Alpha蒙版单独保存!UNet高级功能详解 1. 引言:为什么Alpha蒙版独立保存如此重要? 在图像处理的实际工作中,我们经常遇到这样的问题:一张精心抠出的人像,导入到设计软件后边缘出现白边,或者半透…

Qwen3-4B智能写作助手实战:创意内容生成系统搭建

Qwen3-4B智能写作助手实战:创意内容生成系统搭建 1. 为什么选择Qwen3-4B搭建写作助手? 你是不是也经常遇到这样的问题:写文案没灵感、报告千篇一律、社交媒体内容难出爆款?现在,借助阿里开源的 Qwen3-4B-Instruct-25…

2026年靠谱的昆山定制网站多少钱?费用详解

行业背景与市场趋势随着数字化转型浪潮席卷全球,企业网站已从简单的"电子名片"演变为集品牌展示、营销获客、客户服务于一体的综合平台。根据中国互联网络信息中心(CNNIC)报告,2025年中国企业网站建设市场…

2026年口碑好的日本机场酒店接送服务当地人推荐榜

在日本旅行,机场到酒店的交通衔接是影响旅行体验的关键环节。优质的日本机场酒店接送服务不仅能节省时间,还能提供舒适、安全的出行体验。本文基于2026年日本本土用户真实评价、服务覆盖范围、车辆舒适度、司机专业度…

踩坑实录:5张4090显卡为何跑不动Live Avatar?

踩坑实录:5张4090显卡为何跑不动Live Avatar? 1. 问题初现:硬件堆满却无法启动 你有没有遇到过这种情况?手握5张NVIDIA RTX 4090,每张24GB显存,合计120GB VRAM,理论上足够“碾压”大多数AI模型…

HY-MT1.5-7B大模型实战|打造企业级VuePress自动翻译工作流

HY-MT1.5-7B大模型实战|打造企业级VuePress自动翻译工作流 在企业技术文档全球化推进过程中,多语言支持早已不再是“有无”的问题,而是“效率”与“质量”的双重挑战。尤其对于采用 VuePress 构建技术中台、开发者门户或产品手册的团队而言&…