news 2026/6/10 17:20:22

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/10 15:20:16

高效焕新Windows 11:tiny11builder轻量级系统打造全指南

高效焕新Windows 11&#xff1a;tiny11builder轻量级系统打造全指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否也曾经历过Windows 11启动缓慢如龟速、…

作者头像 李华
网站建设 2026/6/5 15:43:24

Paraformer-large长时间运行崩溃?内存泄漏检测与修复

Paraformer-large长时间运行崩溃&#xff1f;内存泄漏检测与修复 1. 问题背景&#xff1a;为什么你的Paraformer服务越跑越慢&#xff1f; 你有没有遇到过这种情况&#xff1a;刚启动的Paraformer-large语音识别服务响应飞快&#xff0c;GPU利用率拉满&#xff0c;识别一个30…

作者头像 李华
网站建设 2026/6/10 14:37:43

RePKG:Wallpaper Engine资源处理技术赋能者

RePKG&#xff1a;Wallpaper Engine资源处理技术赋能者 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 工具定位&#xff1a;数字资源的解码桥梁 在Wallpaper Engine生态系统中&am…

作者头像 李华
网站建设 2026/6/10 12:20:24

为什么PyTorch环境总报错?镜像免配置部署教程是关键

为什么PyTorch环境总报错&#xff1f;镜像免配置部署教程是关键 你是不是也经历过这些场景&#xff1a; 刚想开始训练模型&#xff0c;torch.cuda.is_available() 却返回 False&#xff1b; 安装完一堆包&#xff0c;结果版本冲突&#xff0c;ImportError 接连不断&#xff1b…

作者头像 李华
网站建设 2026/6/10 3:40:30

Open-AutoGLM避坑总结:这些错误千万别犯

Open-AutoGLM避坑总结&#xff1a;这些错误千万别犯 Open-AutoGLM 不是普通的大模型部署项目&#xff0c;它是一套需要三端协同&#xff08;云端推理服务 本地控制端 真机执行层&#xff09;的 AI 手机智能体系统。很多用户卡在“明明步骤都做了&#xff0c;但指令发出去没反…

作者头像 李华