当前位置: 首页 > news >正文

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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/287467/

相关文章:

  • 开源机械臂从零构建全攻略:打造你的协作机器人开发平台
  • Open-AutoGLM避坑总结:这些错误千万别犯
  • Z-Image-Turbo_UI界面性能优化,提升生成速度小技巧
  • BERT中文填空服务实战:成语识别准确率提升技巧参数详解
  • Qwen3-4B实战案例:财务报告自动生成系统部署
  • 突破3D打印瓶颈的秘密武器:Blender3MFFormat插件全攻略
  • 小熊猫Dev-C++零基础上手指南:从环境配置到效率提升的避坑指南
  • NCMconverter完全指南:NCM格式解密与音频转换全攻略
  • 3分钟上手!League Akari智能工具让你的英雄联盟体验效率提升200%
  • 3个技巧让创作者实现语音内容高效提取:bili2text完全指南
  • MinerU如何切换CPU模式?device-mode配置教程
  • 3步轻松实现:跨系统数据迁移与无缝切换的完整指南
  • verl日志分析怎么做?训练过程可视化部署
  • PyTorch预装环境为何更高效?系统纯净度对训练影响评测
  • NewBie-image-Exp0.1显存占用高?14GB优化方案实战解决
  • 4大上分黑科技,让你告别游戏内耗:League Akari智能助手全解析
  • MinerU如何精准提取复杂PDF?表格识别部署实战案例详解
  • 开发者入门必看:Qwen3-4B-Instruct镜像免配置部署指南
  • BERT-base-chinese性能优化:推理速度提升200%部署教程
  • verl能否支持LoRA?插件式训练集成可行性分析
  • Qwen3-14B低成本部署:消费级4090实现80 token/s性能优化
  • 7个实用技巧:TikTok视频批量下载与高效管理指南
  • 通义千问3-14B显存优化:梯度检查点技术应用案例
  • MinerU模型切换教程:如何加载其他版本权重文件
  • 一键部署AI抠图工具,科哥UNet镜像开箱即用,支持PNG透明输出
  • 如何高效实现视频转文字全流程?告别传统转录烦恼的完整方案
  • Qwen3-Embedding-4B监控体系:生产环境指标采集教程
  • MinerU能否私有化部署?本地安全合规方案详解
  • Dev-C++极简入门与效率提升指南:从新手到高手的C/C++开发利器
  • 跨品牌智能家居平台:实现设备互联互通的自主控制方案