
在 Linux 世界里,有一些“老而弥坚”的配置文件,哪怕在 systemd 横行的今天,它依然默默在很多系统中起作用。
今天我们要聊的,就是那个几乎每个资深运维都遇到过的文件——/etc/rc.local
如果你刚接触 Linux,这可能只是个陌生的名字;
但如果你懂它,你就能掌控系统启动后的“隐秘自动化”。
一、什么是 rc.local?
rc.local 的全称是 “Run Commands Local”,它的功能非常直接:
在系统启动完成后,自动执行你写在其中的命令。
换句话说——
这是 Linux 启动阶段最后一个“自由入口”。
只要写在里面的命令没错,它会在开机时自动运行,不需要手动执行,不需要开服务。
📜 典型路径如下:
/etc/rc.local
或
/etc/rc.d/rc.local
二、一个最简单的 rc.local 示例
打开文件(部分系统需自行创建):
sudo vim /etc/rc.local添加内容:
#!/bin/bash
# rc.local 示例
# 启动自定义脚本
bash /usr/local/bin/start_my_app.sh &
# 挂载网络磁盘
mount -t nfs 192.168.1.10:/data /mnt/data
# 启动Docker容器
docker start halo_blog
# 输出日志
echo "rc.local executed at $(date)" >> /var/log/rc.local.log
exit 0
保存后赋予执行权限:
sudo chmod +x /etc/rc.local重启系统:
sudo reboot然后,你的程序、脚本、容器、挂载……都会在系统启动后自动运行!
是不是有点像 Windows 里的“启动项”?
三、为什么有的系统没有 rc.local?
在 System V(SysVinit) 时代,rc.local 是“启动命令终点”。
但在现代 systemd 体系下,启动流程发生了变化。
有的发行版(比如 Ubuntu 22.04、CentOS 8、Kylin V10 SP3)默认不再启用 rc.local 服务。
不过——
只要我们愿意,它仍然可以复活。
四、在 systemd 中启用 rc.local
1️⃣ 创建 rc-local.service
sudo vim /etc/systemd/system/rc-local.service写入以下内容:
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
2️⃣ 赋予 rc.local 可执行权限
sudo chmod +x /etc/rc.local3️⃣ 启动并设置开机自启
sudo systemctl enable rc-local
sudo systemctl start rc-local4️⃣ 验证状态
systemctl status rc-local
当看到 “active (exited)” 时,说明运行成功!
五、为什么很多人仍然喜欢用 rc.local?
相比写一个复杂的 .service 文件,rc.local 更像是“系统开机的万能笔记本”——
你想到什么、想让系统自动干什么,都能丢进去。
六、使用 rc.local 的注意事项
必须有
#!/bin/bash头部
否则无法被识别为可执行脚本。最后必须加
exit 0
表示正常退出,否则 systemd 认为它执行失败。命令建议使用绝对路径
如/usr/bin/python3而不是python3,避免启动环境变量不同导致失败。不要在里面写交互命令
例如read、passwd这类需要输入的命令,会阻塞启动。可以用日志追踪执行情况
echo "rc.local start at $(date)" >> /var/log/rc.local.log
七、实战案例:科研网服务器开机自动配置脚本
在国产化环境(如银河麒麟 V10 SP3)中,很多科研服务器要在开机时自动:
启动网研院态势感知平台
恢复 NFS 挂载
同步日志采集服务
打开 SSH 安全审计模块
一个典型的 /etc/rc.local 可能是这样:
#!/bin/bash
# 科研网自动初始化脚本
mount -a
systemctl start wyy-sensor
systemctl start les-asset
systemctl start les-log
logger "科研网 rc.local executed at $(date)"
exit 0
每次开机后,系统自动完成所有配置。
这就是 rc.local 最迷人的地方——自动化、无感知、极稳定。
八、总结:一句话记住 rc.local
rc.local 是 Linux 启动阶段的“最后一块拼图”,
它让系统在每次启动后自动执行你想要的一切。
哪怕在 systemd 时代,它依然是最优雅、最人性的“自启动入口”。
