news 2026/4/23 9:20:57

Linux运维入门:掌握最基本的自启脚本配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux运维入门:掌握最基本的自启脚本配置

Linux运维入门:掌握最基本的自启脚本配置

你有没有遇到过这样的情况:服务器重启后,某个关键服务没起来,业务直接中断;或者每次开机都要手动执行一遍相同的命令,重复又容易出错?其实,Linux系统早就为你准备好了可靠的解决方案——开机自启脚本。它不依赖复杂工具,不需安装额外软件,只要几行清晰的配置,就能让系统在启动完成的第一时间自动执行你指定的任务。

这篇文章不是讲systemd服务单元文件的高级写法,也不是堆砌各种发行版差异的理论对比。它聚焦最核心、最通用、最稳妥的一条路径:用rc.local机制实现脚本自启。无论你是刚接触Linux的新手,还是需要快速验证方案的运维工程师,只要你会用终端、能看懂基础Shell命令,就能跟着一步步完成配置,并在重启后亲眼看到效果。我们不绕弯子,不讲抽象概念,只说“做什么”和“怎么做”。

1. 明确目标与适用场景

1.1 这个方法能解决什么问题

  • 让一个Shell脚本在系统启动完成后自动运行(比如启动监控程序、初始化数据库连接、挂载网络存储)
  • 无需编写复杂的systemd service文件,适合快速验证或临时需求
  • 兼容性好,Ubuntu 16.04/18.04/20.04、Debian、CentOS 7等主流发行版均原生支持(部分新版系统需简单启用)
  • 不依赖图形界面,纯命令行环境即可完成全部操作

1.2 它不适合哪些情况

  • 需要严格控制服务启动顺序(如必须在MySQL之后、Nginx之前启动)
  • 要求服务崩溃后自动重启(rc.local只执行一次,失败不重试)
  • 多用户环境下需为不同用户分别配置(它属于系统级启动,对所有用户生效)
  • 生产环境长期运行的关键服务(建议后续迁移到systemd管理)

一句话总结:这是Linux自启的“快捷键”,不是“操作系统”。它简单、直接、有效,是每个运维人员都该掌握的第一块基石。

2. 创建你的第一个自启脚本

2.1 选择存放位置与命名规范

脚本可以放在任何有执行权限的目录下,但为了清晰和安全,推荐统一存放在/opt/scripts//usr/local/bin/。这里我们使用/opt/scripts/,因为它专为本地自定义脚本设计,不易与系统文件混淆。

# 创建脚本目录(如果不存在) sudo mkdir -p /opt/scripts # 进入目录 cd /opt/scripts

2.2 编写脚本内容

新建一个名为startup-check.sh的文件,内容如下:

#!/bin/bash # 记录启动时间,便于后续排查 echo "System started at $(date)" >> /var/log/startup-check.log # 执行一个简单但可验证的操作:创建一个带时间戳的测试文件 touch /tmp/startup-test-$(date +%s).tmp # 可选:启动一个后台小任务(例如监听端口) # nc -l 8080 < /dev/null > /dev/null 2>&1 & exit 0

逐行说明

  • #!/bin/bash是必需的“解释器声明”,告诉系统用bash来运行这个文件
  • echo ... >> /var/log/...将日志追加写入系统日志目录,比写在当前目录更规范、更易查找
  • touch ...创建一个带时间戳的空文件,重启后你只需ls /tmp/startup-test*就能立刻确认脚本是否执行
  • exit 0表示脚本成功结束,这对rc.local机制很重要——它会检查脚本退出码,非0值可能导致后续启动流程异常

2.3 设置脚本执行权限

Linux默认不允许执行普通文件,必须显式赋予执行权:

sudo chmod +x /opt/scripts/startup-check.sh

为什么不用chmod 777
777意味着“所有人可读、可写、可执行”,这在生产环境中是严重安全隐患。+x只添加执行权限,保留原有读写权限,既安全又足够。

3. 启用并配置 rc.local 机制

3.1 检查 rc.local 是否存在并启用

在较新的Ubuntu(20.04+)或Debian系统中,rc.local默认被禁用。先确认状态:

sudo systemctl status rc-local

如果显示inactive (dead)或报错Unit rc-local.service could not be found,说明需要手动启用。

启用步骤(一步到位)

# 创建 rc.local 文件(如果不存在) sudo tee /etc/rc.local << 'EOF' #!/bin/bash # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Your commands here: # cd /opt/scripts # ./startup-check.sh exit 0 EOF # 设置执行权限 sudo chmod +x /etc/rc.local # 启用 systemd 服务 sudo systemctl enable rc-local sudo systemctl start rc-local

这段命令做了三件事:创建标准格式的rc.local文件、赋予执行权限、并通过systemd启用它。完成后,sudo systemctl status rc-local应显示active (exited)

3.2 在 rc.local 中调用你的脚本

现在编辑/etc/rc.local,在exit 0之前插入你的脚本调用:

sudo nano /etc/rc.local

将以下两行添加到exit 0上方:

cd /opt/scripts ./startup-check.sh

注意

  • 必须用cd切换到脚本所在目录再执行,避免因路径问题导致脚本内部相对路径失效
  • 不要用sudo ./startup-check.sh——rc.local本身就在root权限下运行,重复sudo反而可能引发权限冲突

保存并退出(nano中按Ctrl+O→ 回车 →Ctrl+X)。

4. 验证配置是否生效

4.1 不重启的快速验证方法

与其反复重启,不如先模拟rc.local的执行环境:

# 以root身份直接运行 rc.local sudo /etc/rc.local # 检查日志是否写入 sudo tail -n 3 /var/log/startup-check.log # 检查测试文件是否生成 ls -t /tmp/startup-test-*.tmp | head -n 1

如果日志里有时间记录,且/tmp下出现了新文件,说明脚本本身和rc.local调用逻辑完全正确。

4.2 最终验证:重启系统

sudo reboot

等待系统完全启动后,登录终端,执行:

# 查看日志末尾,确认本次启动被记录 sudo tail -n 5 /var/log/startup-check.log # 列出所有 startup-test 文件,最新那个就是本次重启生成的 ls -lt /tmp/startup-test-*.tmp | head -n 1

如果输出中包含类似startup-test-1715678901.tmp的文件名,且时间戳与你重启时间吻合,恭喜你,自启脚本已稳定运行。

5. 常见问题与排错指南

5.1 脚本执行了,但日志为空或文件没生成

最常见原因是路径错误rc.local在系统早期启动阶段运行,此时某些挂载点(如/home/mnt)可能尚未就绪。解决方案:

  • 将脚本和日志路径统一放在系统根分区下(如/opt/scripts//var/log/),避开用户目录和外部存储
  • 在脚本开头加入延迟或等待逻辑(仅限调试):
# 等待网络就绪(可选) while ! ping -c1 google.com &>/dev/null; do sleep 2 done

5.2 Ubuntu 22.04+ 提示 “Failed to start /etc/rc.local Compatibility”

这是因为新版Ubuntu彻底移除了rc.local支持。此时有两个选择:

方案一(推荐):改用 systemd 服务(轻量版)

# 创建服务文件 sudo tee /etc/systemd/system/startup-check.service << 'EOF' [Unit] Description=Startup Check Script After=multi-user.target [Service] Type=oneshot ExecStart=/opt/scripts/startup-check.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF # 启用并启动 sudo systemctl daemon-reload sudo systemctl enable startup-check.service sudo systemctl start startup-check.service

方案二(兼容旧习惯):临时启用 rc.local

参考第3.1节中的启用命令,它在22.04上同样有效,只是需要手动创建文件。

5.3 如何修改或停用已配置的自启

  • 修改脚本:直接编辑/opt/scripts/startup-check.sh,保存后无需其他操作,下次启动即生效
  • 临时禁用:注释掉/etc/rc.local中的调用行(在前面加#
  • 永久删除:删除/etc/rc.local中的调用行,并运行sudo systemctl disable rc-local(如果用的是systemd方式)

6. 总结:从入门到可靠落地的三个关键认知

6.1 理解本质,而非死记步骤

rc.local不是一个神秘黑盒,它只是系统在完成所有基础服务启动后,按顺序执行的最后一段“用户自定义代码”。它的价值在于时机确定、权限充足、逻辑简单。掌握这一点,你就不会纠结于“为什么一定要放/etc/下”,而会自然想到:“我需要它在哪个阶段运行?需要什么权限?会不会影响其他服务?”

6.2 日志是排错的唯一真相

永远不要靠“应该执行了”来判断成功。每一行echo、每一个touch,都是你与系统之间的信使。把日志写进/var/log/,而不是当前目录或/tmp,是专业运维的第一课。

6.3 从小处着手,建立可验证的闭环

本文的整个流程就是一个最小可行闭环:写脚本 → 设权限 → 配rc.local → 验证日志 → 重启确认。它不追求功能丰富,只确保每一步都有明确输入、可观察输出、可重复验证。这种思维模式,比记住一百个命令更重要。

你现在拥有的,不仅是一个能开机自启的脚本,更是一把打开Linux自动化世界大门的钥匙。下一步,你可以尝试让它启动一个Python Web服务,或者定时同步远程数据——而所有这些,都建立在今天你亲手配置成功的这个坚实基础上。


获取更多AI镜像

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

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

从零实现:使用Multisim设计并导出至Ultiboard制板

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。全文严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、老练、有“人味”&#xff0c;像一位资深硬件工程师在技术社区真诚分享&#xff1b; ✅ 打破模板化标题体系&#xf…

作者头像 李华
网站建设 2026/4/22 0:08:32

如何用Qwen3-Embedding-0.6B提升代码检索准确率?实战分享

如何用Qwen3-Embedding-0.6B提升代码检索准确率&#xff1f;实战分享 1. 引言&#xff1a;为什么代码检索总在“猜”&#xff0c;而不是“懂”&#xff1f; 你有没有遇到过这些场景&#xff1a; 在几十万行的微服务代码库里&#xff0c;搜索“用户登录失败重试逻辑”&#x…

作者头像 李华
网站建设 2026/4/18 21:53:07

SGLang让大模型更易用,我的真实使用感受

SGLang让大模型更易用&#xff0c;我的真实使用感受 [【免费下载链接】SGLang-v0.5.6 一个专为结构化推理优化的高性能LLM运行时框架&#xff0c;显著提升吞吐、降低延迟、简化复杂任务编程。支持多轮对话、JSON输出、API调用、任务规划等高级能力&#xff0c;真正让大模型“开…

作者头像 李华
网站建设 2026/4/22 6:54:07

宠物行为分析项目,YOLO11跟踪功能体验

宠物行为分析项目&#xff0c;YOLO11跟踪功能体验 本文基于YOLO11镜像实测环境&#xff0c;聚焦宠物行为分析这一具体场景&#xff0c;全程使用预置镜像开箱即用&#xff0c;不涉及模型训练、代码编译或环境配置。所有操作均在Jupyter Notebook中完成&#xff0c;适配零基础用户…

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

Swoole 扩展是按照 PHP 标准扩展构建的。使用 phpize 来生成编译检测脚本,./configure 来做编译配置检测,make 进行编译,make install 进行安装。

✅ 标准 PHP 扩展构建四步法&#xff08;以 Swoole 为例&#xff09;步骤命令作用关键机制1. 准备构建环境phpize生成 configure 脚本调用 php-config 获取当前 PHP 的头文件路径、Zend API 版本等2. 配置编译选项./configure --with-php-config...检测依赖、生成 Makefile读取…

作者头像 李华
网站建设 2026/3/28 7:07:15

verl单控制器模式体验,简单任务更高效

verl单控制器模式体验&#xff0c;简单任务更高效 在强化学习&#xff08;RL&#xff09;驱动的大语言模型&#xff08;LLM&#xff09;后训练实践中&#xff0c;框架的易用性与执行效率往往比理论先进性更直接影响落地节奏。尤其当团队资源有限、任务规模中等、迭代周期紧张时…

作者头像 李华