2026/4/6 5:49:59
网站建设
项目流程
铁路项目建设 网站,如何让百度分享按钮在网站每个页面都有,用手机制作自己app软件下载,网站建站的类型从虚拟机到树莓派#xff0c;测试开机脚本通吃多场景
你有没有遇到过这样的情况#xff1a;每次重启服务器或开发板#xff0c;都要手动启动一堆服务#xff1f;比如你的树莓派上跑着一个监控程序#xff0c;或者虚拟机里部署了一个后台应用#xff0c;结果一断电、一重…从虚拟机到树莓派测试开机脚本通吃多场景你有没有遇到过这样的情况每次重启服务器或开发板都要手动启动一堆服务比如你的树莓派上跑着一个监控程序或者虚拟机里部署了一个后台应用结果一断电、一重启全得重新登录上去一个个拉起来。不仅麻烦还容易遗漏。今天这篇文章就是为了解决这个问题——让脚本在系统开机时自动运行。我们不讲虚的直接上手实战。通过一个通用性强、适配度高的“开机启动脚本”方案带你搞定从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] Typeforking ExecStart/etc/rc.local start TimeoutSec0 StandardOutputtty RemainAfterExityes SysVStartPriority99 [Install] WantedBymulti-user.target Aliasrc-local.service重点是[Install]段中的WantedBymulti-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)], shellTrue)保存并赋予可执行权限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/python4.4 重启验证语音播报保存后重启树莓派sudo reboot等待几秒你应该会听到清晰的英文播报“Welcome to the world of Raspberry Pi”。成功这意味着你的树莓派现在已经具备“智能开机”能力。5. 常见问题与避坑指南虽然整体流程不难但实际操作中很容易踩一些“隐形坑”。以下是高频问题汇总5.1 系统卡在启动界面原因脚本没有放入后台或缺少exit 0。解决办法所有长时间运行的命令后面加确保/etc/rc.local最后一行是exit 0避免在脚本中使用交互式命令如read5.2 脚本路径写错或权限不足常见错误写法python myscript.py如果当前路径不是脚本所在目录就会失败。正确做法使用绝对路径python /home/pi/myscript.py 同时确保脚本有执行权限chmod x /home/pi/myscript.py5.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 21记录日志权限设置确保脚本和服务都有执行权限这样一套配置下来无论是你在 VMware 里的 Ubuntu 虚拟机还是插着屏幕的树莓派4B都可以用几乎相同的脚本实现开机自启。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。