news 2026/6/15 20:08:05

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

作者头像

张小明

前端开发工程师

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

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

1. 引言:为什么你需要开机启动脚本?

你有没有遇到过这样的场景:每次重启服务器后,都要手动启动一堆服务、运行脚本、检查状态?比如你的AI推理服务、监控程序或者自定义的自动化任务。这不仅麻烦,还容易遗漏,影响系统稳定性。

如果你正在使用“测试开机启动脚本”这个镜像,或者想在自己的环境中实现类似功能,那么本文就是为你准备的。我们将带你用5分钟时间,快速掌握Linux下最实用的开机自启动方法,并结合真实镜像环境进行实测,确保每一步都能落地。

本文不讲复杂理论,只聚焦你能立刻上手的方法。无论你是刚接触Linux的新手,还是需要快速验证方案的开发者,都能看完就用。

2. Linux开机启动机制简析

2.1 系统启动流程概览

Linux系统从开机到进入用户界面,大致经历以下几个阶段:

  • BIOS/UEFI 初始化硬件
  • 加载引导程序(如GRUB)
  • 启动内核
  • 启动init进程(或systemd
  • 执行各级别服务和脚本

我们关注的重点是最后一个阶段——如何让我们的脚本在这个过程中自动运行。

2.2 两种主流启动管理方式

方式代表系统特点
SysVinitCentOS 6、早期Ubuntu使用/etc/rc.d/rc.local/etc/init.d/脚本
systemdUbuntu 16+、CentOS 7+使用.service文件,现代标准

由于当前主流发行版均已转向systemd,我们将重点放在.service方式,同时也会介绍兼容性更强的rc.local方法。

3. 方法一:通过 rc.local 实现开机启动(兼容老系统)

3.1 检查系统是否支持 rc.local

不是所有系统都默认启用rc.local。你可以先检查文件是否存在:

ls /etc/rc.local

如果不存在,可以手动创建:

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

3.2 编辑 rc.local 添加自定义命令

打开文件:

sudo nano /etc/rc.local

exit 0之前添加你要执行的命令,例如:

#!/bin/bash # 自定义开机脚本 echo "系统已启动,开始运行测试任务..." >> /var/log/startup.log sleep 2 /usr/bin/python3 /home/user/test_script.py & exit 0

注意:一定要确保最后一行是exit 0,否则可能导致系统卡住。

3.3 验证 rc.local 是否启用

某些系统(如Ubuntu)默认禁用了rc.local服务。你需要手动启用:

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

然后查看状态确认是否正常运行:

systemctl status rc-local

4. 方法二:编写 systemd service 文件(推荐方式)

4.1 创建自定义 service 文件

这是目前最标准、最可靠的方式。假设我们要让一个名为test_script.sh的脚本开机运行。

首先创建服务文件:

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

写入以下内容:

[Unit] Description=Test Startup Script After=network.target Wants=network-online.target [Service] Type=simple ExecStart=/bin/bash /home/user/test_script.sh Restart=on-failure User=user StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target

4.2 编写测试脚本示例

创建脚本文件:

nano ~/test_script.sh

内容如下:

#!/bin/bash # 测试开机启动脚本 LOGFILE="/var/log/test-startup.log" echo "$(date): 开机启动脚本已执行" >> $LOGFILE echo "$(date): 当前用户: $(whoami)" >> $LOGFILE echo "$(date): 系统IP: $(hostname -I)" >> $LOGFILE

赋予执行权限:

chmod +x ~/test_script.sh

4.3 启用并测试 service

加载新服务配置:

sudo systemctl daemon-reload

设置开机自启:

sudo systemctl enable test-startup.service

立即启动服务(无需重启):

sudo systemctl start test-startup.service

查看运行状态:

systemctl status test-startup.service

查看日志输出:

journalctl -u test-startup.service -f

你应该能看到类似输出:

May 10 10:00:00 ubuntu systemd[1]: Started Test Startup Script. May 10 10:00:00 ubuntu bash[1234]: Sun May 10 10:00:00 UTC 2025: 开机启动脚本已执行

5. 在“测试开机启动脚本”镜像中的实测过程

5.1 镜像环境准备

我们使用的镜像是“测试开机启动脚本”,基于Ubuntu 20.04,预装了Python3、bash等基础环境。

登录后执行:

uname -a cat /etc/os-release

确认系统为systemd架构,支持.service方式。

5.2 实际部署步骤

  1. 上传或创建脚本

    echo 'echo "$(date): 镜像启动成功" > /tmp/boot_test.log' > ~/startup_test.sh chmod +x ~/startup_test.sh
  2. 创建 service 文件

    sudo tee /etc/systemd/system/mirror-test.service > /dev/null <<EOF

[Unit] Description=Mirror Test Startup After=network.target

[Service] Type=oneshot ExecStart=/bin/bash /home/user/startup_test.sh RemainAfterExit=yes

[Install] WantedBy=multi-user.target EOF

3. **启用服务** ```bash sudo systemctl daemon-reload sudo systemctl enable mirror-test.service
  1. 重启验证

    sudo reboot
  2. 重启后检查结果

    登录后执行:

    cat /tmp/boot_test.log

    输出应为:

    Sun May 10 10:05:00 UTC 2025: 镜像启动成功

说明脚本已在开机时成功执行。

6. 常见问题与解决方案

6.1 脚本未执行?检查这几个点

  • 权限问题:确保脚本有可执行权限(chmod +x
  • 路径问题:在.service中使用绝对路径
  • 用户环境缺失:如果脚本依赖$HOME或特定环境变量,建议显式指定
  • 依赖服务未就绪:使用After=network.target确保网络可用

6.2 如何调试 service 启动失败?

使用以下命令排查:

# 查看服务状态 systemctl status your-service.service # 查看详细日志 journalctl -u your-service.service --since "1 hour ago" # 手动运行命令测试 sudo -u user /path/to/your/script.sh

6.3 如何取消开机启动?

如果你不再需要某个服务开机启动:

sudo systemctl disable test-startup.service sudo systemctl stop test-startup.service

删除服务文件:

sudo rm /etc/systemd/system/test-startup.service sudo systemctl daemon-reload

7. 总结:选择最适合你的方式

7.1 三种方法对比总结

方法适用场景优点缺点
rc.local老系统、简单任务写法简单,兼容性强Ubuntu 16+ 默认关闭,需额外启用
init.d脚本传统SysVinit系统控制精细,支持多runlevel已逐步淘汰,维护成本高
systemd .service现代Linux系统(推荐)标准化、日志集成、依赖管理强需要学习配置语法

对于“测试开机启动脚本”这类现代镜像环境,强烈推荐使用.service方式。它不仅稳定可靠,还能与系统日志、状态监控无缝集成。

7.2 实用建议

  • 优先使用.service:这是当前和未来的标准。
  • 日志记录必不可少:在脚本中加入时间戳和输出信息,便于排查问题。
  • 避免阻塞启动过程:长时间运行的任务建议后台执行或使用Type=oneshot
  • 定期清理无用服务:避免系统启动越来越慢。

现在你已经掌握了Linux开机启动脚本的核心技能,无论是本地服务器、云主机还是AI镜像环境,都可以轻松实现自动化部署。动手试试吧!


获取更多AI镜像

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

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

开源机械臂从零构建全攻略:打造你的协作机器人开发平台

开源机械臂从零构建全攻略&#xff1a;打造你的协作机器人开发平台 【免费下载链接】OpenArm OpenArm v0.1 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArm 在机器人研究领域&#xff0c;开发者常面临两难选择&#xff1a;商用机械臂价格高昂&#xff08;动…

作者头像 李华
网站建设 2026/6/15 19:23:26

CAM++语音识别精度提升技巧:噪声处理实战优化

CAM语音识别精度提升技巧&#xff1a;噪声处理实战优化 1. 引言&#xff1a;为什么噪声会影响说话人识别&#xff1f; 你有没有遇到过这种情况&#xff1a;明明是同一个人说话&#xff0c;系统却判定“不是同一人”&#xff1f;或者在嘈杂环境下录的语音&#xff0c;识别准确…

作者头像 李华
网站建设 2026/6/15 11:50:52

XUnity Auto Translator技术实践指南:从痛点分析到全球化部署

XUnity Auto Translator技术实践指南&#xff1a;从痛点分析到全球化部署 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 1 剖析游戏本地化三大核心挑战 在游戏全球化进程中&#xff0c;开发者常面临难以…

作者头像 李华
网站建设 2026/6/15 11:49:42

JetBrains IDE试用期重置全攻略:零基础上手的终极解决方案

JetBrains IDE试用期重置全攻略&#xff1a;零基础上手的终极解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains系列IDE是开发者的重要工具&#xff0c;但试用期限制常带来困扰。ide-eval-resette…

作者头像 李华
网站建设 2026/6/15 19:47:25

突破3D打印文件壁垒:Blender3MF插件革新工作流全解析

突破3D打印文件壁垒&#xff1a;Blender3MF插件革新工作流全解析 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 痛点分析&#xff1a;3D打印文件处理的常见难题 在3D打…

作者头像 李华
网站建设 2026/6/15 11:50:56

人像抠图入门第一步:BSHM镜像快速上手教程

人像抠图入门第一步&#xff1a;BSHM镜像快速上手教程 你是否曾为一张精美的人像照片无法更换背景而烦恼&#xff1f;是否在做设计时被复杂的PS操作劝退&#xff1f;现在&#xff0c;借助AI技术&#xff0c;只需几步就能实现高质量人像抠图。本文将带你从零开始&#xff0c;使…

作者头像 李华