2026/5/14 2:35:35
网站建设
项目流程
郑州网站优化排名,专科医院网站建设,青岛网站建设,如何制作应用软件从0开始学Linux自启脚本#xff0c;测试开机启动脚本超详细教程
1. 引言#xff1a;为什么需要开机自启脚本#xff1f;
在实际的服务器运维和嵌入式系统开发中#xff0c;经常需要某些服务或脚本在系统启动时自动运行。例如#xff0c;自动挂载磁盘、启动监控程序、初始…从0开始学Linux自启脚本测试开机启动脚本超详细教程1. 引言为什么需要开机自启脚本在实际的服务器运维和嵌入式系统开发中经常需要某些服务或脚本在系统启动时自动运行。例如自动挂载磁盘、启动监控程序、初始化环境变量等。手动执行不仅效率低下还容易遗漏。本文将带你从零开始掌握Linux系统下如何配置开机自启动脚本适用于CentOS和Ubuntu等主流发行版。通过本教程你将学会编写可执行的初始化脚本理解系统运行级别与启动流程正确创建软链接以实现开机自启验证并调试自启功能无论你是初学者还是有一定经验的开发者都能通过本指南快速上手并应用于实际项目。2. 准备自启动脚本2.1 创建脚本文件我们将编写一个简单的测试脚本用于验证开机是否成功执行。该脚本会记录当前时间到指定日志文件中。sudo vim /etc/init.d/mytest.sh输入以下内容#!/bin/bash # # mytest.sh - 测试开机自启脚本 # description: 记录系统启动时间到日志文件 case $1 in start) echo $(date): 系统已启动执行 mytest.sh 脚本 /var/log/mytest.log ;; stop) echo $(date): 系统正在关闭执行停止操作 /var/log/mytest.log ;; *) echo Usage: $0 {start|stop} exit 1 ;; esac exit 02.2 设置脚本权限确保脚本具有可执行权限sudo chmod x /etc/init.d/mytest.sh注意/etc/init.d/是传统SysVinit系统的标准脚本存放目录尽管现代系统多使用systemd但该方式仍广泛兼容。3. 查看系统运行级别3.1 什么是运行级别RunlevelLinux系统根据“运行级别”决定启动哪些服务。不同级别对应不同的系统状态运行级别含义0关机1单用户模式维护模式2-5多用户模式具体含义因发行版而异6重启3.2 查询当前运行级别使用runlevel命令查看最后一次和当前的运行级别runlevel输出示例N 5其中N表示无前一状态5表示当前运行级别为5。在大多数桌面版Ubuntu/CentOS中默认运行级别为5带图形界面的多用户模式。对于无GUI的服务器通常为3。3.3 确定对应的rc目录每个运行级别对应一个/etc/rcX.d/目录X为数字系统启动时会依次执行该目录下的脚本。由于我们查得运行级别为5因此应关注/etc/rc5.d/4. 进入对应的rc.d目录并创建软链接4.1 切换到目标目录cd /etc/rc5.d/该目录下包含大量以S或K开头的符号链接它们指向/etc/init.d/中的真实脚本。4.2 理解S与K前缀的含义前缀含义场景SStart系统启动时执行服务启动KKill系统关闭时执行服务停止后接两位数字表示执行顺序范围为00~99。数值越小优先级越高。例如S10network网络服务较早启动S99local本地自定义脚本最后启动4.3 为脚本创建软链接为了确保我们的脚本在其他关键服务如网络、文件系统就绪后再运行建议设置较高的序号如99。执行命令sudo ln -s /etc/init.d/mytest.sh S99mytest参数说明-s创建符号链接软链接源路径/etc/init.d/mytest.sh链接名S99mytest命名规范为S{两位数字}{脚本名}4.4 验证软链接是否创建成功ls -l S99mytest输出应类似lrwxrwxrwx 1 root root 25 Apr 5 10:00 S99mytest - /etc/init.d/mytest.sh表示软链接已正确建立。5. 测试开机自启动功能5.1 手动模拟启动过程可选在重启前可以先手动测试脚本能否正常执行sudo /etc/init.d/mytest.sh start检查日志文件是否生成cat /var/log/mytest.log预期输出Mon Apr 5 10:05:00 CST 2025: 系统已启动执行 mytest.sh 脚本5.2 重启系统进行真实测试使用以下命令重启sudo reboot系统重新启动后登录并查看日志cat /var/log/mytest.log如果看到新的时间戳记录说明脚本已在开机时自动执行6. 常见问题与解决方案6.1 脚本未执行排查要点问题检查方法解决方案权限不足ls -l /etc/init.d/mytest.sh使用chmod x添加执行权限软链接错误ls -l /etc/rc5.d/S99mytest确保链接指向正确的源文件路径拼写错误readlink /etc/rc5.d/S99mytest修正源路径或重新创建链接日志目录不存在ls /var/log/手动创建/var/log/mytest.log并赋权6.2 如何支持多个运行级别若希望脚本在多个级别下都启动如3和5需为每个级别创建对应链接sudo ln -s /etc/init.d/mytest.sh /etc/rc3.d/S99mytest6.3 删除自启配置当不再需要自启时删除软链接即可不要删除原脚本sudo rm /etc/rc5.d/S99mytest7. 最佳实践建议7.1 脚本命名规范使用小写字母和下划线避免空格或特殊字符名称应清晰表达用途如backup_db.sh、mount_disks.sh7.2 启动顺序规划根据依赖关系合理设置序号序号区间推荐用途01–20内核模块、设备驱动21–50网络、存储、数据库51–80应用服务81–99自定义脚本、日志记录7.3 添加系统服务管理支持进阶虽然本文使用SysVinit方式但在支持systemd的系统中推荐将其封装为Unit文件以获得更好控制。示例/etc/systemd/system/mytest.service[Unit] DescriptionMy Test Startup Script Afternetwork.target [Service] ExecStart/etc/init.d/mytest.sh start ExecStop/etc/init.d/mytest.sh stop RemainAfterExityes [Install] WantedBymulti-user.target启用命令sudo systemctl enable mytest.service8. 总结通过本教程你已经掌握了在Linux系统中配置开机自启动脚本的完整流程编写脚本放置于/etc/init.d/并赋予执行权限确认运行级别使用runlevel命令获取当前级别创建软链接在/etc/rcX.d/中建立以S开头的链接验证功能重启系统并检查日志输出优化管理遵循最佳实践提升稳定性和可维护性这套方法适用于CentOS 6/7 和 Ubuntu 18.04/20.04 等仍保留SysVinit兼容层的系统是运维工作中非常实用的基础技能。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。