聊城市网站建设_网站建设公司_前后端分离_seo优化
2026/3/2 19:25:46 网站建设 项目流程

5分钟学会rc.local配置,配合测试脚本快速上手

1. 引言:为什么需要开机自启动脚本?

在嵌入式设备、工控机或服务器运维场景中,经常需要系统在开机后自动执行某些初始化任务,例如启动监控程序、挂载文件系统、运行健康检查脚本等。Linux 提供了多种实现开机自启动的方式,其中rc.local是最经典、兼容性最好且无需复杂配置的一种方法。

本文聚焦于rc.local方式的完整实践流程,结合一个实际的测试脚本,带你从零开始完成配置、调试与验证全过程,确保5分钟内即可上手并成功运行。


2. 测试脚本准备

我们先创建一个简单的 Bash 脚本用于测试,验证其是否能在系统启动时被正确执行。

2.1 创建测试脚本

#!/bin/bash # test.sh - 开机启动测试脚本 cd /home/Desktop/ ls echo "OK!" >> /home/Desktop/rc_local_test.log date >> /home/Desktop/rc_local_test.log exit 0

说明

  • 将当前目录切换到 Desktop。
  • 执行ls列出文件。
  • 向日志文件写入标记和时间,便于后续验证执行结果。
  • 使用绝对路径更稳妥(如/bin/ls),但此处为简化示例使用相对调用。

2.2 设置脚本权限

将脚本保存为/home/Desktop/test.sh,并赋予可执行权限:

chmod +x /home/Desktop/test.sh

你可以手动运行一次以确认功能正常:

/home/Desktop/test.sh cat /home/Desktop/rc_local_test.log

预期输出类似:

OK! Mon Apr 5 10:00:00 CST 2025

3. 配置 rc.local 实现开机自启动

3.1 确认 rc.local 文件存在

大多数现代 Linux 发行版(包括 Ubuntu 18.04+)默认不再启用rc.local,需手动启用。

首先检查是否存在该文件:

sudo ls /etc/rc.local

如果不存在,请创建:

sudo touch /etc/rc.local

3.2 编辑 rc.local 内容

使用文本编辑器打开:

sudo nano /etc/rc.local

填入以下内容:

#!/bin/sh -e # # rc.local # 自定义开机执行脚本 # 由 systemd 兼容服务调用 # # 添加你的命令(注意使用绝对路径更可靠) su - $USER -c "cd /home/Desktop && /bin/bash ./test.sh" exit 0

关键点解析

  • #!/bin/sh -e:表示使用 sh 执行,-e表示遇到错误立即退出。
  • su - $USER -c:因为rc.local在用户登录前运行,图形环境未加载,直接执行桌面路径脚本可能失败。通过su模拟用户上下文是常见解决方案。
  • 推荐使用全路径:如/usr/bin/bash/bin/ls等,避免 PATH 不全导致命令找不到。
  • exit 0必须保留,否则可能导致启动卡顿。

3.3 设置 rc.local 可执行权限

sudo chmod +x /etc/rc.local

4. 启用 rc.local 服务(Ubuntu 18.04+ 特别步骤)

由于新版 Ubuntu 使用 systemd,rc.local不再默认启用,必须显式激活对应的服务单元。

4.1 检查 rc-local.service 是否存在

systemctl status rc-local

若提示“not found”,则需要手动创建服务文件。

4.2 创建 systemd 服务单元(如不存在)

sudo nano /etc/systemd/system/rc-local.service

写入以下内容:

[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

4.3 启用并启动服务

sudo systemctl enable rc-local.service sudo systemctl start rc-local.service

查看状态确认是否成功:

sudo systemctl status rc-local.service

正常输出应包含:

active (exited) since ...

5. 验证开机自启动效果

5.1 重启系统

sudo reboot

等待系统完全启动后,登录账户。

5.2 检查日志输出

查看 Desktop 目录下的日志文件:

cat /home/Desktop/rc_local_test.log

如果看到类似内容:

OK! Mon Apr 5 10:05:23 CST 2025

说明脚本已成功在开机时执行!

此外,也可通过以下命令查看rc.local最近一次执行情况:

journalctl -u rc-local.service --since "1 hour ago"

你可能会看到如下信息:

Started /etc/rc.local Compatibility. /etc/rc.local start exited with status 'success'

6. 常见问题与解决方案

6.1 脚本未执行?检查这些地方!

问题现象原因分析解决方案
日志文件未生成路径错误或权限不足使用sudo -u username明确指定用户执行
提示 command not foundPATH 环境变量缺失改用绝对路径调用命令(如/usr/bin/ls
rc.local 服务 failed文件无执行权限或缺少 exit 0chmod +x /etc/rc.local并确保末尾有exit 0
图形界面相关命令无效X Server 尚未启动若需 GUI 操作,建议改用 GNOME 自启动或延时执行

6.2 如何添加延迟执行(适用于依赖桌面环境的场景)?

若脚本涉及 GUI 或必须等待桌面就绪,可在rc.local中加入延时:

(sleep 15; su - $USER -c "/home/Desktop/test.sh") &

后台延时执行,避免阻塞系统启动。


7. 对比其他开机启动方式

方法优点缺点适用场景
rc.local兼容性强、配置简单、跨发行版通用Ubuntu 18+ 需手动启用服务通用初始化脚本
systemd service精确控制依赖、日志集成好学习成本较高复杂服务管理
crontab @reboot用户级易配置执行时机较晚用户进程启动
gnome-session-properties图形化操作方便仅限 GNOME 桌面用户桌面应用自启
/etc/init.d + update-rc.dSysV 遗留方案,支持优先级设置已逐步淘汰老旧系统维护

推荐选择:对于轻量级、非服务型脚本,rc.local依然是最简洁高效的方案。


8. 总结

rc.local虽然是一个“古老”的机制,但在现代 Linux 系统中依然具有极高的实用价值,尤其适合快速部署一次性初始化任务或调试用途。

通过本文的学习,你应该已经掌握了:

  1. 如何编写并测试一个开机启动脚本;
  2. 如何正确配置/etc/rc.local并使其在新版本 Ubuntu 上生效;
  3. 如何排查常见执行失败问题;
  4. 与其他启动方式的对比选型思路。

现在你可以自信地将任何初始化逻辑封装成脚本,交由rc.local在每次开机时自动执行。


获取更多AI镜像

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询