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 8:00:43

用GPEN镜像给祖辈照片上色,感动到落泪

用GPEN镜像给祖辈照片上色&#xff0c;感动到落泪 老照片承载着家族的记忆&#xff0c;但泛黄、模糊、褪色却是时间留下的遗憾。尤其是那些黑白的老照片&#xff0c;虽然记录了亲人的面容&#xff0c;却总让人觉得少了点“温度”。直到我尝试用 GPEN人像修复增强模型镜像 给祖…

作者头像 李华
网站建设 2026/6/10 0:55:17

告别过热:TCC-G15让你的游戏本性能满血释放

告别过热&#xff1a;TCC-G15让你的游戏本性能满血释放 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 TCC-G15是一款专为Dell G15游戏笔记本设计的开源散热控…

作者头像 李华
网站建设 2026/6/10 8:03:49

3分钟解锁公平抽奖工具:Lucky Draw让活动策划效率提升90%

3分钟解锁公平抽奖工具&#xff1a;Lucky Draw让活动策划效率提升90% 【免费下载链接】lucky-draw 年会抽奖程序 项目地址: https://gitcode.com/gh_mirrors/lu/lucky-draw 还在为活动抽奖环节的公平性争议、复杂配置流程和场景适配难题烦恼吗&#xff1f;作为你的专属活…

作者头像 李华
网站建设 2026/6/10 8:01:35

中文场景适配佳!YOLOE在工业质检中的应用

中文场景适配佳&#xff01;YOLOE在工业质检中的应用 在智能制造加速推进的今天&#xff0c;传统的人工质检方式正面临效率瓶颈。一条日均产出数万件产品的产线&#xff0c;若依赖人工抽检&#xff0c;不仅成本高昂&#xff0c;还容易因疲劳导致漏检误检。而通用目标检测模型在…

作者头像 李华
网站建设 2026/6/10 7:59:59

Unsloth结合思维链微调:提升复杂推理能力

Unsloth结合思维链微调&#xff1a;提升复杂推理能力 在大模型落地实践中&#xff0c;一个常被忽视却至关重要的能力是复杂问题的分步推理能力——不是直接抛出答案&#xff0c;而是像人类专家一样“边想边答”&#xff1a;识别问题结构、拆解子任务、验证中间结论、排除错误路…

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

Sambert显存溢出怎么办?8GB GPU内存压缩部署案例

Sambert显存溢出怎么办&#xff1f;8GB GPU内存压缩部署案例 1. 为什么Sambert在8GB显存上容易“爆掉”&#xff1f; 你刚下载完Sambert语音合成镜像&#xff0c;兴冲冲地启动服务&#xff0c;结果终端里突然跳出一行红色报错&#xff1a;CUDA out of memory——显存不够了。…

作者头像 李华