news 2026/4/16 3:10:05

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/4/15 22:15:33

Qwen3-VL-2B跨模态检索:图文匹配系统搭建

Qwen3-VL-2B跨模态检索&#xff1a;图文匹配系统搭建 1. 引言 随着多模态人工智能的快速发展&#xff0c;视觉-语言模型&#xff08;Vision-Language Model, VLM&#xff09;在图文理解、跨模态检索和智能交互等场景中展现出巨大潜力。阿里云推出的 Qwen3-VL-2B-Instruct 是当…

作者头像 李华
网站建设 2026/4/11 16:29:52

AI智能文档扫描仪性能测试:不同分辨率输入效果对比

AI智能文档扫描仪性能测试&#xff1a;不同分辨率输入效果对比 1. 引言 1.1 选型背景 随着移动办公和远程协作的普及&#xff0c;将纸质文档快速转化为数字扫描件已成为日常刚需。市面上主流的文档扫描应用&#xff08;如“全能扫描王”&#xff09;大多依赖深度学习模型进行…

作者头像 李华
网站建设 2026/4/12 8:18:32

为何选择无模型方案?AI 印象派艺术工坊稳定性实战验证

为何选择无模型方案&#xff1f;AI 印象派艺术工坊稳定性实战验证 1. 背景与挑战&#xff1a;当AI艺术遇上部署稳定性 近年来&#xff0c;AI驱动的图像风格迁移技术迅速普及&#xff0c;从梵高风格的《星月夜》再现到个性化头像生成&#xff0c;深度学习模型展现出惊人的创造…

作者头像 李华
网站建设 2026/4/11 20:10:39

微调结果可验证!Qwen2.5-7B前后对比演示

微调结果可验证&#xff01;Qwen2.5-7B前后对比演示 1. 引言&#xff1a;低资源高效微调的实践价值 在大模型时代&#xff0c;如何以最低成本实现模型能力定制化&#xff0c;是开发者关注的核心问题。通义千问团队发布的 Qwen2.5-7B-Instruct 模型凭借其出色的推理能力和中文…

作者头像 李华
网站建设 2026/4/11 17:38:27

verl快速入门手册:一句话启动训练任务

verl快速入门手册&#xff1a;一句话启动训练任务 1. 引言 1.1 大型语言模型后训练的挑战 随着大型语言模型&#xff08;LLMs&#xff09;在自然语言处理领域的广泛应用&#xff0c;如何高效地进行模型对齐与行为优化成为关键问题。传统的监督微调&#xff08;SFT&#xff0…

作者头像 李华
网站建设 2026/4/7 12:30:05

Qwen3-Embedding-4B部署指南:多模型协同工作方案

Qwen3-Embedding-4B部署指南&#xff1a;多模型协同工作方案 1. 引言 随着大模型在语义理解、信息检索和知识管理等场景的广泛应用&#xff0c;高质量的文本向量化能力成为构建智能系统的核心基础。通义千问团队于2025年8月开源了Qwen3-Embedding-4B——一款专为高效、高精度…

作者头像 李华