news 2026/5/7 7:25:22

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

作者头像

张小明

前端开发工程师

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/4/27 21:46:52

rs485modbus协议源代码中RTU帧解析的细节分析

深入rs485modbus协议源码:RTU帧解析的工程实现与实战细节在工业自动化现场,你是否曾遇到过这样的问题——设备明明接线正确、地址配置无误,但通信就是时断时续?或者偶尔收到乱码指令导致执行异常?这些问题的背后&#…

作者头像 李华
网站建设 2026/5/3 9:33:11

TensorFlow-v2.15保姆级教程:训练日志分析与调试技巧

TensorFlow-v2.15保姆级教程:训练日志分析与调试技巧 1. 引言 1.1 学习目标 本文旨在为深度学习开发者提供一份完整的 TensorFlow v2.15 实战指南,重点聚焦于模型训练过程中的日志记录、可视化监控与常见问题调试技巧。通过本教程,读者将掌…

作者头像 李华
网站建设 2026/5/1 18:48:38

Qwen2.5-0.5B部署优化:多GPU并行计算的配置技巧

Qwen2.5-0.5B部署优化:多GPU并行计算的配置技巧 1. 技术背景与部署挑战 随着大语言模型在实际应用中的广泛落地,轻量级但高性能的模型部署成为工程实践中的关键环节。Qwen2.5-0.5B-Instruct 作为阿里云开源的轻量级指令调优模型,在保持较小…

作者头像 李华
网站建设 2026/5/3 11:41:21

GPEN参数调优疑问?高级设置中降噪与锐化平衡技巧

GPEN参数调优疑问?高级设置中降噪与锐化平衡技巧 1. 引言:图像修复中的增强艺术 在数字图像处理领域,人脸肖像的视觉质量直接影响用户体验。GPEN(Generative Prior Enhancement Network)作为一种基于生成先验的图像增…

作者头像 李华
网站建设 2026/5/3 11:52:42

十分钟搭建RetinaFace人脸检测服务:无需配置的云端GPU方案

十分钟搭建RetinaFace人脸检测服务:无需配置的云端GPU方案 你是不是也遇到过这样的情况?作为一名前端开发者,手头有个摄影网站项目,想给用户上传的照片自动加上“人脸标记”功能——比如点击一张合照,系统能圈出每个人…

作者头像 李华
网站建设 2026/5/4 17:51:33

OpenCV DNN模型解析:人脸检测与属性分析原理

OpenCV DNN模型解析:人脸检测与属性分析原理 1. 技术背景与核心问题 在计算机视觉领域,人脸属性分析是一项极具实用价值的技术方向。从安防系统到智能营销,从个性化推荐到人机交互,对人脸的性别、年龄等基本属性进行快速识别&am…

作者头像 李华