news 2026/2/20 11:27:00

5分钟搞定Linux开机自启,测试脚本一键部署实测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟搞定Linux开机自启,测试脚本一键部署实测

5分钟搞定Linux开机自启,测试脚本一键部署实测

1. 引言:为什么需要开机自启动?

在嵌入式设备、服务器运维和自动化测试场景中,系统开机后自动执行特定脚本或程序是一项基础但关键的需求。无论是树莓派上运行环境监测程序,还是云服务器自动拉起服务进程,手动干预不仅效率低下,还容易因人为疏忽导致服务中断。

本文以“测试开机启动脚本”镜像为实践载体,结合 Ubuntu 虚拟机与树莓派 4B 的真实案例,手把手带你掌握 Linux 系统下主流的开机自启方案。全程操作控制在5分钟内可完成,适合快速验证和批量部署。

目标读者将通过本文:

  • ✅ 理解三种主流开机自启机制的核心差异
  • ✅ 掌握rc.localsystemd的完整配置流程
  • ✅ 完成一个可验证的开机打印脚本部署
  • ✅ 避免常见卡死系统、权限不足等典型问题

2. Linux 开机自启机制概览

Linux 系统的启动过程由初始化系统(init system)管理,目前主流发行版普遍采用systemd作为默认 init 系统。不同的自启方式对应不同阶段的系统加载时机和权限模型。

方式适用系统执行时机权限级别是否推荐
rc.local多数传统发行版所有服务启动后root⚠️ 兼容性使用
systemdsystemd 系统(Ubuntu 16+、CentOS 7+)按依赖顺序启动可配置用户/系统级✅ 推荐
init.dSysVinit 系统启动早期root❌ 已淘汰

核心建议:优先使用systemd实现服务化管理;对于简单调试任务,可临时启用rc.local快速验证。


3. 方法一:通过 rc.local 实现开机执行(兼容模式)

尽管 Ubuntu 18.04 及以后版本默认禁用了/etc/rc.local,但我们可以通过恢复其 systemd 单元文件来重新启用这一经典方式,特别适合快速测试类脚本。

3.1 检查并修复 rc-local.service

首先确认系统是否存在原始 service 文件:

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

若输出包含rc-local.service,则继续编辑该文件:

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

确保内容包含[Install]段落,否则添加如下配置:

[Install] WantedBy=multi-user.target Alias=rc-local.service

3.2 创建并配置 /etc/rc.local 脚本

创建脚本文件:

sudo touch /etc/rc.local sudo chmod +x /etc/rc.local sudo vim /etc/rc.local

写入以下测试内容(注意必须以#!/bin/sh开头,并以exit 0结尾):

#!/bin/sh -e # # rc.local # This script is executed at the end of each multiuser runlevel. echo "$(date): System booted, running startup script" >> /var/log/startup.log # 示例:运行用户目录下的测试脚本 /home/testuser/startup_test.sh || true exit 0

3.3 建立软链接并启用服务

sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable rc-local sudo systemctl start rc-local

重要提示:任何在rc.local中调用的长时间运行脚本必须加&放入后台,否则会阻塞系统启动。例如:

/home/testuser/long_running_script.sh &

4. 方法二:使用 systemd 创建自定义服务(推荐方案)

systemd是现代 Linux 系统的标准服务管理器,支持精细化控制启动顺序、重启策略、日志记录等功能,是生产环境首选。

4.1 编写测试脚本

创建一个简单的日志生成脚本用于验证:

mkdir -p /home/testuser && cd /home/testuser cat > startup_test.sh << 'EOF' #!/bin/bash DATE=$(date '+%Y-%m-%d %H:%M:%S') echo "✅ Startup script executed at $DATE" >> /home/testuser/boot.log EOF chmod +x startup_test.sh

4.2 创建 systemd 服务单元文件

推荐使用系统级服务(所有用户生效),创建服务文件:

sudo vim /etc/systemd/system/test-startup.service

填入以下内容:

[Unit] Description=Test Startup Script After=network.target syslog.target Documentation=https://example.com/startup-guide [Service] Type=simple User=testuser WorkingDirectory=/home/testuser ExecStart=/home/testuser/startup_test.sh StandardOutput=journal StandardError=journal Restart=no [Install] WantedBy=multi-user.target
参数说明:
  • After=network.target:确保网络已就绪后再运行
  • User=testuser:以普通用户身份运行,提升安全性
  • Restart=no:仅运行一次,不重复启动
  • StandardOutput=journal:输出重定向至 journal 日志系统

4.3 启用并验证服务

# 重载配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable test-startup.service # 立即启动一次(无需重启) sudo systemctl start test-startup.service # 查看状态 sudo systemctl status test-startup.service

查看执行结果:

cat /home/testuser/boot.log # 输出示例: # ✅ Startup script executed at 2025-04-05 10:20:30

4.4 查看日志(高级调试)

使用journalctl查看服务运行详情:

sudo journalctl -u test-startup.service --since today

5. 树莓派 4B 实战案例:语音播报欢迎语

本节基于 Raspberry Pi OS(Debian 衍生版)演示如何实现开机语音播报,展示rc.local在嵌入式场景中的典型应用。

5.1 安装 espeak 语音合成工具

sudo apt update sudo apt install -y espeak

测试语音功能:

espeak "Hello from Raspberry Pi"

5.2 编写 Python 调用脚本

cd /home/pi nano sample.py

输入以下代码:

#!/usr/bin/env python import subprocess import time # 延迟5秒等待音频设备初始化 time.sleep(5) subprocess.call(['espeak "Welcome to the world of Raspberry Pi" 2>/dev/null'], shell=True)

赋予执行权限:

chmod +x sample.py

5.3 配置 rc.local 自动调用

编辑启动脚本:

sudo nano /etc/rc.local

exit 0前插入:

# 启动语音播报脚本(后台运行) sudo -u pi python /home/pi/sample.py & > /home/pi/boot_log.txt 2>&1

保存后重启验证:

sudo reboot

注意事项

  • 使用sudo -u pi切换到 pi 用户避免权限问题
  • 添加&将进程放入后台,防止阻塞启动
  • 输出重定向便于后续排查问题

6. 常见问题与避坑指南

6.1 系统卡在启动界面无法进入桌面

原因rc.local中执行了前台阻塞程序且未加&

解决方案

  • 所有长时任务必须后台运行:command &
  • 添加超时保护:timeout 30 command &
  • 使用nohup防止被终止:nohup command &

6.2 权限拒绝或找不到命令

原因PATH环境变量未继承,或脚本无执行权限。

解决方法

  • 在脚本中显式指定路径:/usr/bin/python而非python
  • 给脚本赋权:chmod +x script.sh
  • .service文件中设置Environment=PATH=...

示例修复:

[Service] Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

6.3 systemd 服务启动失败但无明显报错

使用以下命令深入排查:

# 查看详细状态 systemctl status your-service.service # 查看完整日志 journalctl -u your-service.service -b # 检查语法错误 systemd-analyze verify /etc/systemd/system/your-service.service

7. 总结

本文围绕“测试开机启动脚本”这一实际需求,系统讲解了 Linux 下两种核心自启方案的配置流程,并通过 Ubuntu 虚拟机与树莓派 4B 的双平台实测验证了可行性。

关键要点回顾:

  1. rc.local适用于快速测试,但在新系统中需手动恢复支持;
  2. systemd是现代系统的标准做法,支持更精细的服务控制;
  3. 所有前台脚本必须后台化运行(加&),否则会导致系统卡死;
  4. 合理使用日志输出和journalctl可大幅提升排错效率;
  5. 优先以非 root 用户运行服务,增强系统安全性。

通过本文提供的模板,你可以轻松将任意测试脚本、监控程序或自动化任务集成到系统启动流程中,实现真正的“一键部署、无人值守”。


获取更多AI镜像

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 0:02:29

bge-large-zh-v1.5应用案例:电商评论情感分析实战

bge-large-zh-v1.5应用案例&#xff1a;电商评论情感分析实战 1. 背景与问题定义 在电商平台中&#xff0c;用户评论是反映商品质量和服务体验的重要数据来源。然而&#xff0c;面对海量的非结构化文本评论&#xff0c;人工分析效率低下且难以规模化。因此&#xff0c;如何自…

作者头像 李华
网站建设 2026/2/15 21:40:53

GTE vs BGE语义相似度实测:云端GPU 2小时低成本对比

GTE vs BGE语义相似度实测&#xff1a;云端GPU 2小时低成本对比 你是不是也遇到过这样的问题&#xff1f;作为产品经理&#xff0c;要为搜索、推荐或知识库系统选一个合适的文本嵌入模型&#xff0c;但面对市面上五花八门的选项——GTE、BGE、Jina、m3e……根本不知道哪个更适…

作者头像 李华
网站建设 2026/2/16 15:43:26

Degrees of Lewdity汉化兼容性终极指南:从入门到精通

Degrees of Lewdity汉化兼容性终极指南&#xff1a;从入门到精通 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …

作者头像 李华
网站建设 2026/2/16 21:13:21

iOS微信红包助手技术解析与实战应用

iOS微信红包助手技术解析与实战应用 【免费下载链接】WeChatRedEnvelopesHelper iOS版微信抢红包插件,支持后台抢红包 项目地址: https://gitcode.com/gh_mirrors/we/WeChatRedEnvelopesHelper 在移动社交生态中&#xff0c;微信红包已成为日常互动的重要形式。针对iOS用…

作者头像 李华
网站建设 2026/2/20 4:02:01

亲测Qwen1.5-0.5B-Chat:轻量级对话模型真实体验分享

亲测Qwen1.5-0.5B-Chat&#xff1a;轻量级对话模型真实体验分享 1. 引言 在当前大模型快速发展的背景下&#xff0c;轻量化部署与本地化推理正成为越来越多开发者和企业的关注焦点。尽管千亿参数级别的大模型在性能上表现出色&#xff0c;但其高昂的算力成本和复杂的部署要求…

作者头像 李华
网站建设 2026/2/16 18:10:56

炉石传说HsMod终极指南:新手必学的5大高效玩法

炉石传说HsMod终极指南&#xff1a;新手必学的5大高效玩法 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 想要在《炉石传说》中节省时间、提升效率吗&#xff1f;HsMod这款基于BepInEx框架的开源…

作者头像 李华