/etc/rc.local是linux系统中传统、轻量的开机自启入口,适用于执行单次命令或初始化任务;需确保文件存在、首行含#!/bin/bash、添加命令至exit 0前、赋予可执行权限,并启用rc-local服务。

在 Linux 系统中,/etc/rc.local 是一个传统、轻量、易上手的开机自启入口,适合执行单次命令、启动脚本或初始化任务。它在系统完成基础服务(如网络、文件系统)启动后、进入多用户模式前执行,不依赖图形界面,纯命令行即可配置。
确认 rc.local 文件存在且路径正确
现代 systemd 系统(CentOS 7+、Ubuntu 16.04+、Debian 8+)中,/etc/rc.local 通常是 /etc/rc.d/rc.local 的软链接。先检查是否存在:
- 运行
ls -l /etc/rc.local,确认它指向/etc/rc.d/rc.local - 若不存在,可手动创建:
sudo touch /etc/rc.d/rc.local && sudo ln -sf /etc/rc.d/rc.local /etc/rc.local - 确保文件首行是
#!/bin/bash(必须存在且未被注释)
往 rc.local 中添加启动命令
用编辑器打开并追加你的命令,注意放在 exit 0 之前:
sudo vim /etc/rc.local- 示例:启动 Nginx、运行自定义脚本、记录日志
#/bin/bash
echo "$(date): system booting..." >> /var/log/rc-local.log
/usr/local/nginx/sbin/nginx
sudo -u appuser /home/app/start.sh &
exit 0
关键点:
• 后台运行加 &,避免阻塞后续启动
• 建议重定向输出(如 > /tmp/start.log 2>&1),方便排错
• 避免使用交互式命令(如 read、sudo -i)
赋予执行权限并启用 rc-local 服务
CentOS 7 及以后默认无执行权限,且需 systemd 显式管理该文件:
- 给文件加执行权:
sudo chmod +x /etc/rc.d/rc.local - 启用 systemd 兼容服务:
sudo systemctl enable rc-local - 启动服务立即生效:
sudo systemctl start rc-local - 验证是否激活:
sudo systemctl status rc-local,应显示active (exited)
常见问题与绕过要点
如果配置后仍不执行,大概率卡在这几个环节:
-
/etc/rc.local没有#!/bin/bash或被注释掉 - 脚本路径写错,或目标脚本本身缺少
+x权限 - 环境变量缺失(rc.local 运行在 minimal 环境下):建议用绝对路径,或显式加载,例如:
. /etc/profile && your_command - 网络未就绪就调用远程服务:可在命令前加等待逻辑,如
until ping -c1 google.com && break; do sleep 2; done











