news 2026/3/26 20:11:25

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

作者头像

张小明

前端开发工程师

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/3/26 9:13:22

VRCX:重新定义你的VRChat社交体验管理神器

VRCX:重新定义你的VRChat社交体验管理神器 【免费下载链接】VRCX Friendship management tool for VRChat 项目地址: https://gitcode.com/GitHub_Trending/vr/VRCX 在虚拟社交平台VRChat中,你是否曾经因为错过好友的精彩聚会而遗憾?是…

作者头像 李华
网站建设 2026/3/25 5:53:20

免费高效!Granite-4.0-Micro轻量AI微调新体验

免费高效!Granite-4.0-Micro轻量AI微调新体验 【免费下载链接】granite-4.0-micro-unsloth-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/granite-4.0-micro-unsloth-bnb-4bit 导语:IBM推出的30亿参数轻量级大模型Granite-4.0…

作者头像 李华
网站建设 2026/3/24 2:14:44

Manim数学动画框架完整安装指南:从零基础到专业可视化

Manim数学动画框架完整安装指南:从零基础到专业可视化 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 还在为复杂的数学概念难以直观展…

作者头像 李华
网站建设 2026/3/26 13:29:40

Qwen3-VL-FP8:4B超轻量AI视觉全能推理王

Qwen3-VL-FP8:4B超轻量AI视觉全能推理王 【免费下载链接】Qwen3-VL-4B-Thinking-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-VL-4B-Thinking-FP8 导语:阿里云推出Qwen3-VL-4B-Thinking-FP8模型,以4B参数量实现接近…

作者头像 李华
网站建设 2026/3/13 12:33:25

DeepSeek-R1-Distill-Qwen-1.5B部署总结:关键配置检查清单

DeepSeek-R1-Distill-Qwen-1.5B部署总结:关键配置检查清单 1. 项目背景与模型能力 你是不是也遇到过这样的问题:想要一个轻量但推理能力强的文本生成模型,既能写代码、解数学题,又能做逻辑分析,还不占太多显存&#…

作者头像 李华
网站建设 2026/3/17 2:33:38

比在线工具强在哪?fft npainting lama离线优势解析

比在线工具强在哪?fft npainting lama离线优势解析 1. 引言:为什么你需要一个离线图像修复方案? 你有没有遇到过这种情况:手头有一张重要照片,上面有个碍眼的水印、路人或者划痕,想快速去掉,但…

作者头像 李华