news 2026/5/19 19:42: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/5/1 7:38:45

Swift-All监控体系:GPU利用率与内存泄漏检测方法

Swift-All监控体系&#xff1a;GPU利用率与内存泄漏检测方法 1. 技术背景与问题提出 随着大模型在训练和推理场景中的广泛应用&#xff0c;系统资源的高效利用成为影响研发效率和部署成本的关键因素。ms-swift作为魔搭社区推出的一站式大模型训练与部署框架&#xff0c;已支持…

作者头像 李华
网站建设 2026/5/7 19:24:56

[特殊字符]_微服务架构下的性能调优实战[20260116161916]

作为一名经历过多个微服务架构项目的工程师&#xff0c;我深知在分布式环境下进行性能调优的复杂性。微服务架构虽然提供了良好的可扩展性和灵活性&#xff0c;但也带来了新的性能挑战。今天我要分享的是在微服务架构下进行性能调优的实战经验。 &#x1f4a1; 微服务架构的性…

作者头像 李华
网站建设 2026/5/16 21:21:37

如何验证GPEN修复质量?评估脚本使用方法详解教程

如何验证GPEN修复质量&#xff1f;评估脚本使用方法详解教程 1. 镜像环境说明 组件版本核心框架PyTorch 2.5.0CUDA 版本12.4Python 版本3.11推理代码位置/root/GPEN 主要依赖库&#xff1a; facexlib: 用于人脸检测与对齐basicsr: 基础超分框架支持opencv-python, numpy<…

作者头像 李华
网站建设 2026/5/11 15:55:05

ESP32-CAM视频传输稳定性提升:Arduino实践案例

让ESP32-CAM不再卡顿&#xff1a;从掉帧到流畅视频流的实战调优之路 你有没有过这样的经历&#xff1f; 手里的ESP32-CAM模块刚上电&#xff0c;打开网页准备查看实时画面&#xff0c;结果看到的却是“一卡一顿”的马赛克幻灯片&#xff1b;或者运行几分钟后Wi-Fi突然断开&am…

作者头像 李华
网站建设 2026/5/12 9:58:07

旅游导览创新:根据游客笑声热度调整讲解节奏内容

旅游导览创新&#xff1a;根据游客笑声热度调整讲解节奏 1. 背景与问题提出 在传统旅游导览场景中&#xff0c;讲解内容和节奏通常由导游或预设脚本决定&#xff0c;缺乏对游客实时反馈的感知能力。这种“单向输出”模式容易导致信息过载、兴趣流失&#xff0c;尤其在面对不同…

作者头像 李华
网站建设 2026/5/13 13:11:30

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-Localiza…

作者头像 李华