news 2026/4/15 16:20:46

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

作者头像

张小明

前端开发工程师

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/13 16:48:18

拒绝文档滞后,.NET+AI 问答知识库免费用!

别再被过时文档坑了!我把 .NETAI 付费课程做成了 RAG 知识库,免费用!痛点:文档追不上代码在学习 .NETAI 的过程中,大家是否也遇到过这样的困扰:官方文档严重滞后,跟不上版本更新速度。频繁的 Br…

作者头像 李华
网站建设 2026/4/11 11:00:21

CosyVoice-300M Lite部署教程:轻量级TTS模型CPU一键部署实战

CosyVoice-300M Lite部署教程:轻量级TTS模型CPU一键部署实战 1. 引言 1.1 语音合成技术的轻量化趋势 随着边缘计算和终端智能设备的普及,对高效、低资源消耗的语音合成(Text-to-Speech, TTS)模型需求日益增长。传统TTS系统往往…

作者头像 李华
网站建设 2026/4/8 16:48:20

古籍数字化新招:MinerU云端版解决老旧PDF识别难题

古籍数字化新招:MinerU云端版解决老旧PDF识别难题 你是不是也遇到过这样的情况:手头有一堆扫描版的古籍文献,字迹模糊、排版杂乱,甚至用的是繁体竖排或异体字,想把它们转成电子文本做研究,结果用常规的OCR工…

作者头像 李华
网站建设 2026/4/10 4:00:58

pjsip移植到Android系统完整指南

手把手教你把 pjsip 移植到 Android:从编译到通话的完整实战 你有没有遇到过这样的需求——客户说:“我们要做个 VoIP 应用,能打内线电话那种。” 你一查资料,发现市面上开源 SIP 栈不少,但真正稳定、高效又支持 Andr…

作者头像 李华
网站建设 2026/4/12 0:43:07

麦橘超然模型市场:支持第三方模型一键安装的设想

麦橘超然模型市场:支持第三方模型一键安装的设想 1. 引言与背景 随着 AI 图像生成技术的快速发展,本地化、轻量化部署成为越来越多开发者和创作者的核心需求。麦橘超然(MajicFLUX)离线图像生成控制台正是在这一背景下诞生的一款…

作者头像 李华
网站建设 2026/4/11 19:45:41

基于Qwen的情感计算系统搭建:全流程部署实战指南

基于Qwen的情感计算系统搭建:全流程部署实战指南 1. 引言 1.1 业务场景描述 在智能客服、用户反馈分析和社交内容监控等实际应用中,情感计算(Sentiment Analysis)是一项关键的自然语言处理任务。传统方案通常依赖专用模型&…

作者头像 李华