news 2026/1/28 20:46:55

看完就会!测试开机启动脚本完整操作流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
看完就会!测试开机启动脚本完整操作流程

看完就会!测试开机启动脚本完整操作流程

1. 引言

在Linux系统运维和自动化部署中,让自定义脚本随系统启动自动运行是一项非常基础且关键的能力。无论是初始化环境变量、启动后台服务,还是执行健康检查任务,都可以通过配置开机启动脚本来实现。

本文将带你从零开始,完整演示如何在CentOS和Ubuntu系统中配置一个开机自启的Shell脚本。整个过程无需复杂工具,仅依赖系统自带的init.d机制与rcN.d目录结构,确保兼容性和稳定性。

你将掌握:

  • 开机启动脚本的基本原理
  • 如何编写符合规范的启动脚本
  • 根据运行级别创建软链接
  • 验证脚本是否成功执行

适合所有希望提升自动化能力的开发与运维人员。


2. 准备启动脚本

2.1 脚本存放位置

Linux传统SysV init系统约定:所有可管理的服务脚本应放置于/etc/init.d/目录下。

我们在此目录创建一个名为mytest.sh的测试脚本:

sudo vim /etc/init.d/mytest.sh

2.2 编写脚本内容

以下是一个标准格式的启动脚本模板,包含startstopstatus等常用命令支持:

#!/bin/bash # # mytest.sh - A simple test script for boot startup # chkconfig: 2345 99 01 # description: Test script to run at boot time case "$1" in start) echo "$(date): Starting test script..." >> /var/log/mytest.log ;; stop) echo "$(date): Stopping test script..." >> /var/log/mytest.log ;; status) echo "Test script is running (simulated)" >> /var/log/mytest.log ;; *) echo "Usage: $0 {start|stop|status}" exit 1 ;; esac exit 0

说明

  • #!/bin/bash指定解释器
  • case "$1"支持不同操作指令
  • 日志输出到/var/log/mytest.log,便于验证执行情况
  • 注释中的chkconfig行用于部分系统识别(如CentOS)

2.3 设置权限

脚本必须具有可执行权限,否则无法被调用:

sudo chmod +x /etc/init.d/mytest.sh

此时可以手动测试脚本是否正常工作:

sudo /etc/init.d/mytest.sh start cat /var/log/mytest.log

你应该能看到类似如下输出:

Wed Apr 5 10:00:00 UTC 2025: Starting test script...

3. 查看系统运行级别

3.1 什么是运行级别?

Linux 使用“运行级别”(Runlevel)来定义系统当前的状态。不同的运行级别对应不同的服务集合。常见的有:

运行级别含义
0关机
1单用户模式
2-5多用户模式(具体含义因发行版而异)
6重启

桌面版通常默认进入图形界面(Runlevel 5),服务器版多为 Runlevel 3。

3.2 查询当前运行级别

使用runlevel命令查看最后一次切换的运行级别:

runlevel

输出示例:

N 5

表示系统当前处于Runlevel 5(N 表示之前无状态)。这意味着系统启动时会加载/etc/rc5.d/目录下的所有启动脚本。

⚠️ 注意:若输出为N 3,则需使用/etc/rc3.d/目录。


4. 创建启动软链接

4.1 rcN.d 目录的作用

/etc/rcN.d/是指向/etc/init.d/脚本的符号链接集合。系统根据运行级别 N 加载对应的目录。

例如:

  • Runlevel 5 →/etc/rc5.d/
  • Runlevel 3 →/etc/rc3.d/

这些链接命名规则如下:

[S|K]NNname
前缀含义
SStart,在系统启动时执行
KKill,在系统关闭时执行
NN两位数字(01~99),表示执行顺序
name实际服务名称

4.2 创建S开头的启动链接

因为我们希望脚本在开机时启动,所以需要创建一个以S开头的软链接。

进入对应目录(以 Runlevel 5 为例):

cd /etc/rc5.d/

创建软链接:

sudo ln -s /etc/init.d/mytest.sh S99mytest

参数说明

  • ln -s:创建符号链接
  • /etc/init.d/mytest.sh:源文件路径
  • S99mytest:链接名,S表示启动,99表示最后启动(避免依赖问题)

4.3 验证链接是否生效

列出目录内容确认链接存在:

ls -l /etc/rc5.d/S99mytest

预期输出:

lrwxrwxrwx 1 root root 20 Apr 5 10:05 S99mytest -> /etc/init.d/mytest.sh

这表明软链接已正确建立。


5. 测试与验证

5.1 重启系统

最直接的验证方式是重启机器:

sudo reboot

等待系统重新启动后登录。

5.2 检查日志输出

查看日志文件,确认脚本是否被执行:

cat /var/log/mytest.log

如果一切正常,你会看到类似记录:

Wed Apr 5 10:05:01 UTC 2025: Starting test script...

该时间应接近系统启动时间,证明脚本确实在开机阶段被调用。

5.3 手动模拟启动行为(可选)

如果不方便重启,也可以手动触发:

sudo /etc/rc5.d/S99mytest start

然后检查日志,用于调试脚本逻辑。


6. 注意事项与最佳实践

6.1 启动顺序建议

如果你的脚本依赖网络、数据库或其他服务,请确保其启动顺序晚于这些依赖项。

推荐做法:

  • 将序号设为90以上(如S99mytest
  • 或参考其他关键服务的编号进行调整

可通过以下命令查看现有服务顺序:

ls /etc/rc5.d/S* | head -10

6.2 日志记录必不可少

务必为脚本添加日志输出,尤其是在生产环境中。没有日志就等于“黑盒”,难以排查失败原因。

建议统一写入/var/log/下的独立日志文件,并定期轮转。

6.3 权限与安全

  • 脚本文件属主应为root
  • 权限设置为755(即rwxr-xr-x
sudo chown root:root /etc/init.d/mytest.sh sudo chmod 755 /etc/init.d/mytest.sh

防止普通用户篡改或执行。

6.4 兼容性提示

虽然本文方法适用于大多数基于 SysV init 的系统(如 CentOS 6/7、Ubuntu 18.04 及更早版本),但在使用systemd的新系统中(如 Ubuntu 20.04+、CentOS 8+),推荐改用.service文件方式。

不过,出于兼容性考虑,许多 systemd 系统仍保留对/etc/init.d/脚本的支持,只要脚本格式正确即可自动适配。


7. 总结

7. 总结

本文详细讲解了如何在 Linux 系统中配置一个开机自启的 Shell 脚本,涵盖从脚本编写、权限设置、运行级别判断到软链接创建的全流程。核心要点如下:

  1. 脚本必须放在/etc/init.d/目录并赋予可执行权限
  2. 根据runlevel输出选择正确的/etc/rcN.d/目录
  3. 使用ln -s创建以S开头的软链接控制启动行为
  4. 通过日志验证脚本是否真正执行

这套方案简单、稳定、无需额外依赖,特别适合嵌入式设备、老旧服务器或轻量级容器环境中的自动化需求。

即使未来迁移到 systemd 架构,理解这一底层机制也有助于深入掌握 Linux 启动流程的本质。


获取更多AI镜像

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

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

PDF-Extract-Kit-1.0实战:批量处理法律合同的关键信息提取

PDF-Extract-Kit-1.0实战:批量处理法律合同的关键信息提取 在法律、金融和企业服务领域,合同文档的自动化信息提取是提升效率的核心环节。传统方法依赖人工阅读与摘录,耗时长且易出错。随着多模态大模型的发展,PDF-Extract-Kit-1…

作者头像 李华
网站建设 2026/1/28 10:06:17

Qwen1.5-0.5B-Chat实战:情感分析对话系统开发

Qwen1.5-0.5B-Chat实战:情感分析对话系统开发 1. 引言 1.1 项目背景与业务需求 在当前智能客服、用户反馈监控和社交平台内容管理等场景中,情感分析已成为自然语言处理(NLP)的重要应用方向。传统的情感分类模型通常只能对静态文…

作者头像 李华
网站建设 2026/1/23 15:51:09

ModelScope生态应用:Qwen1.5-0.5B-Chat部署实践

ModelScope生态应用:Qwen1.5-0.5B-Chat部署实践 1. 引言 1.1 轻量级对话模型的工程价值 随着大语言模型在各类应用场景中的广泛落地,如何在资源受限环境下实现高效推理成为工程实践中的一大挑战。尽管千亿参数级别的模型在性能上表现卓越,…

作者头像 李华
网站建设 2026/1/26 0:37:46

解决TensorFlow兼容难题|DCT-Net人像卡通镜像实战体验

解决TensorFlow兼容难题|DCT-Net人像卡通镜像实战体验 在AI图像风格迁移领域,人像卡通化正成为虚拟形象生成、社交娱乐和数字内容创作的重要技术路径。然而,许多经典模型受限于早期深度学习框架的硬件适配能力,在新一代GPU上运行…

作者头像 李华
网站建设 2026/1/26 0:16:16

构建稳定工业信号指示:三极管LED驱动电路图解说明

如何用一颗三极管点亮工业现场的每一盏LED灯?在工厂车间里,PLC柜上那一排排闪烁的指示灯,不只是装饰。它们是设备“心跳”的脉搏,是故障预警的第一道防线,更是工程师判断系统状态最直观的眼睛。可你有没有遇到过这样的…

作者头像 李华
网站建设 2026/1/26 10:58:52

Glyph视觉推理应用场景盘点:这5类最受益

Glyph视觉推理应用场景盘点:这5类最受益 1. 引言:视觉推理如何重塑长上下文处理范式 在大语言模型(LLM)迈向“百万token”时代的过程中,上下文长度的扩展正面临算力与成本的双重瓶颈。传统基于Transformer架构的注意…

作者头像 李华