news 2026/4/18 0:01:01

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

作者头像

张小明

前端开发工程师

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/4/18 8:44:09

MinerU部署后报错怎么办?常见问题排查指南

MinerU部署后报错怎么办?常见问题排查指南 MinerU 2.5-1.2B 深度学习 PDF 提取镜像,专为解决科研、出版、教育等场景中 PDF 文档结构复杂、内容混排带来的提取难题而设计。它能精准识别多栏排版、嵌套表格、数学公式、矢量图与扫描图混合的文档&#xf…

作者头像 李华
网站建设 2026/4/18 8:18:50

Z-Image-Turbo首帧加载慢?模型预热机制优化建议

Z-Image-Turbo首帧加载慢?模型预热机制优化建议 1. 问题背景:为什么首帧生成总是卡顿? 你有没有遇到过这种情况:刚启动Z-Image-Turbo环境,满怀期待地运行脚本,结果第一张图等了整整20秒才开始出图&#x…

作者头像 李华
网站建设 2026/4/17 13:03:47

终极完整指南:如何在ComfyUI中安装配置LTXVideo视频生成插件

终极完整指南:如何在ComfyUI中安装配置LTXVideo视频生成插件 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 想要在ComfyUI中体验强大的视频生成功能吗?C…

作者头像 李华
网站建设 2026/4/17 23:15:15

KAT-Dev-32B开源:62.4%解决率!编程AI前五新选择

KAT-Dev-32B开源:62.4%解决率!编程AI前五新选择 【免费下载链接】KAT-Dev 项目地址: https://ai.gitcode.com/hf_mirrors/Kwaipilot/KAT-Dev 导语:Kwaipilot团队正式开源编程大模型KAT-Dev-32B,在SWE-Bench Verified基准测…

作者头像 李华
网站建设 2026/4/10 6:33:43

TurboDiffusion成本效益分析:中小企业视频制作替代方案

TurboDiffusion成本效益分析:中小企业视频制作替代方案 1. TurboDiffusion是什么? TurboDiffusion是由清华大学、生数科技与加州大学伯克利分校联合研发的视频生成加速框架,专为解决传统文生视频(T2V)和图生视频&…

作者头像 李华
网站建设 2026/4/15 15:31:14

Qwen-Image-Edit-2509:AI多图融合与超强一致性修图工具

Qwen-Image-Edit-2509:AI多图融合与超强一致性修图工具 【免费下载链接】Qwen-Image-Edit-2509 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen-Image-Edit-2509 导语 Qwen-Image-Edit-2509正式发布,作为Qwen-Image-Edit系列的月度迭代…

作者头像 李华