news 2026/3/3 14:22:10

系统级自启就这么配,简单又可靠

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系统级自启就这么配,简单又可靠

系统级自启就这么配,简单又可靠

在实际运维和系统管理中,我们经常会遇到这样的需求:希望某个脚本或服务能够在系统重启后自动运行,无需人工干预。比如监控脚本、环境初始化任务、后台守护进程等。如果每次重启都要手动启动,不仅效率低,还容易遗漏。

本文将带你一步步配置一个系统级开机自启脚本,方法适用于主流的 Linux 发行版,包括 CentOS 和 Ubuntu。整个过程清晰、稳定、可验证,适合生产环境使用。


1. 准备你的启动脚本

首先,我们需要一个要自启的脚本文件。通常这类脚本会放在/etc/init.d/目录下,这是传统 SysVinit 系统的标准路径,至今仍被广泛支持。

假设我们要创建一个名为mytest.sh的测试脚本:

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

写入以下内容作为示例:

#!/bin/bash # # mytest.sh 测试开机自启脚本 # description: 用于验证系统启动时是否成功执行 case "$1" in start) echo "【$(date)】测试脚本已启动,正在写入日志..." >> /var/log/mytest.log ;; stop) echo "【$(date)】测试脚本收到停止命令" >> /var/log/mytest.log ;; *) echo "用法: $0 {start|stop}" exit 1 ;; esac exit 0

保存退出后,记得给脚本添加可执行权限:

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

同时,创建日志文件并设置权限(避免因无权限导致失败):

sudo touch /var/log/mytest.log sudo chmod 644 /var/log/mytest.log

这个脚本很简单:当执行start参数时,会在日志中记录当前时间;stop则记录停止动作。你可以根据需要替换成自己的初始化逻辑。


2. 查看系统的运行级别

Linux 系统启动时会进入某个“运行级别”(runlevel),不同的级别对应不同的服务状态。现代系统虽然多用 systemd,但很多仍兼容 SysVinit 的 rc 脚本机制。

查看当前默认运行级别,可以使用命令:

runlevel

输出可能类似:

N 5

这里的5表示图形界面或多用户网络模式(带 GUI 的多用户模式)。如果你是在纯服务器上操作,可能是3(多用户文本模式)。

小知识

  • runlevel 3:命令行模式,支持网络
  • runlevel 5:图形界面模式
  • /etc/rcX.d/中的 X 就是运行级别数字
  • 这些目录下的脚本链接自/etc/init.d/

所以我们接下来要关注的是/etc/rc5.d/目录(以 runlevel 5 为例)。


3. 进入对应的 rc.d 启动目录

根据上一步查到的运行级别,进入相应的 rc 目录:

cd /etc/rc5.d/

列出当前目录内容:

ls -l

你会看到一堆以SK开头的软链接,例如:

S01sysstat S10rsyslog S20network S99local

这些代表在系统启动过程中按顺序执行的服务脚本。

命名规则说明

  • S:Start,表示系统启动时执行
  • K:Kill,表示关闭时执行(关机阶段)
  • 后面两位数字是执行顺序,范围从 00 到 99
  • 数字越小,启动越早;越大则越晚
  • 名称通常是服务名的缩写

如果你想让你的脚本较晚启动(比如依赖数据库或其他服务),建议选择较高的序号,如S99


4. 为脚本创建软链接

为了让系统在启动时自动调用我们的脚本,需要在/etc/rc5.d/目录中创建一个指向/etc/init.d/mytest.sh的软链接。

执行以下命令:

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

这条命令做了三件事:

  • 创建了一个名为S99test的软链接
  • 指向/etc/init.d/mytest.sh
  • 命名规范符合启动脚本要求(S + 序号 + 名称)

再次查看目录内容:

ls -l S99*

你应该能看到类似输出:

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

这说明软链接已经正确建立。

提示:你也可以使用update-rc.d(Ubuntu)或chkconfig(CentOS)工具来自动化管理这些链接,但直接创建软链接是最直观、最通用的方式,尤其适合一次性任务或调试场景。


5. 手动测试脚本是否可用

在重启之前,先手动测试一下脚本能否正常运行:

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

然后检查日志:

cat /var/log/mytest.log

应该能看到类似内容:

【Sat Apr 5 10:05:12 CST 2025】测试脚本已启动,正在写入日志...

这说明脚本本身没有问题,可以被正确调用。


6. 重启系统验证效果

现在进行最终验证:重启系统,看脚本是否自动执行。

sudo reboot

系统重启完成后,重新登录,查看日志文件:

cat /var/log/mytest.log

如果看到新的时间戳条目,说明脚本已在开机时自动运行!

例如:

【Sat Apr 5 10:05:12 CST 2025】测试脚本已启动,正在写入日志... 【Sat Apr 5 10:12:33 CST 2025】测试脚本已启动,正在写入日志...

第二条就是重启后自动触发的结果。


7. 可选优化与注意事项

虽然上述方法简单有效,但在实际使用中还需注意以下几点:

设置脚本描述信息(增强兼容性)

有些系统会对/etc/init.d/脚本做语法检查。为了更规范,可以在脚本头部加入标准注释块:

#!/bin/bash # # chkconfig: 2345 99 01 # description: 测试开机自启脚本,用于验证系统启动流程 # processname: mytest.sh

其中:

  • 2345表示在哪些运行级别启用
  • 99是启动优先级
  • 01是停止优先级

CentOS 上可配合chkconfig --add mytest.sh使用,但本文方法不依赖此工具。

多运行级别适配

如果你不确定系统始终运行在 runlevel 5,可以为多个级别创建链接:

sudo ln -s /etc/init.d/mytest.sh /etc/rc3.d/S99test sudo ln -s /etc/init.d/mytest.sh /etc/rc5.d/S99test

这样无论系统进入哪个常用模式都能触发。

避免阻塞系统启动

确保你的脚本是非阻塞的。如果脚本长时间不退出(比如一直循环监听),会导致系统卡在启动流程。

解决办法:让脚本快速启动后台进程后立即退出。例如:

start) if ! pgrep -f "my_daemon.py" > /dev/null; then nohup /usr/local/bin/my_daemon.py &>> /var/log/my_daemon.log & echo "守护进程已启动" else echo "守护进程已在运行" fi ;;

权限与路径安全

  • 脚本必须有执行权限:chmod +x
  • 使用绝对路径调用程序
  • 日志目录需提前存在且可写

8. 总结

通过本文的方法,你已经掌握了如何在 Linux 系统中配置一个稳定可靠的开机自启脚本。整个过程总结如下:

1. 编写脚本并放入/etc/init.d/

2. 给脚本添加可执行权限

3. 查看系统运行级别(runlevel

4. 进入对应/etc/rcX.d/目录(如/etc/rc5.d/

5. 创建以S开头的软链接(如S99test

6. 重启系统验证效果

这种方法基于传统的 SysVinit 机制,在 CentOS 6/7、Ubuntu 16.04~20.04 等系统上均能良好工作,即使在部分使用 systemd 的系统中也因兼容层而有效。

它不需要复杂的 unit 文件编写,也不依赖特定发行版工具,是一种轻量、通用、易懂的系统级自启方案,特别适合嵌入式设备、老旧系统维护或快速部署场景。


获取更多AI镜像

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

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

腾讯开源翻译集成模型:33语互译WMT25夺冠30项

腾讯开源翻译集成模型:33语互译WMT25夺冠30项 【免费下载链接】Hunyuan-MT-Chimera-7B 腾讯混元Hunyuan-MT-Chimera-7B是业界首个开源翻译集成模型,支持33种语言互译(含5种中国少数民族语言)。在WMT25竞赛中,31个参赛语…

作者头像 李华
网站建设 2026/3/1 23:16:30

ProxyPin全平台抓包工具:从零开始的完整使用指南

ProxyPin全平台抓包工具:从零开始的完整使用指南 【免费下载链接】network_proxy_flutter 开源免费抓包软件ProxyPin,支持全平台系统,用flutter框架开发 项目地址: https://gitcode.com/GitHub_Trending/ne/network_proxy_flutter Pro…

作者头像 李华
网站建设 2026/3/1 8:20:34

7步搞定自动化三维重建:从零开始的高效实践指南

7步搞定自动化三维重建:从零开始的高效实践指南 【免费下载链接】colmap COLMAP - Structure-from-Motion and Multi-View Stereo 项目地址: https://gitcode.com/GitHub_Trending/co/colmap 还在为手动处理海量图像数据而头疼吗?三维重建技术虽然…

作者头像 李华
网站建设 2026/3/3 23:12:19

终极指南:5分钟精通pot-desktop跨平台翻译神器

终极指南:5分钟精通pot-desktop跨平台翻译神器 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trending/po/pot-desktop …

作者头像 李华
网站建设 2026/2/27 11:19:10

YOLO26单卡训练方案:消费级GPU适配实战

YOLO26单卡训练方案:消费级GPU适配实战 最新 YOLO26 官方版训练与推理镜像 本镜像基于 YOLO26 官方代码库 构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。 1. 镜像环境说明 该镜像为YOL…

作者头像 李华
网站建设 2026/2/28 2:07:41

微信自动化神器WeChatFerry:让工作沟通更高效

微信自动化神器WeChatFerry:让工作沟通更高效 【免费下载链接】WeChatFerry 微信逆向,微信机器人,可接入 ChatGPT、ChatGLM、讯飞星火、Tigerbot等大模型。Hook WeChat. 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatFerry …

作者头像 李华