rc.local
是一个在许多基于 Linux 的系统中用于配置系统启动时执行命令的脚本文件。尽管在一些现代系统中它已经逐渐被 systemd 等取代,但仍然有不少场景使用它。以下是关于 rc.local
文件的详细解析:
1. 文件位置
- 通常路径:
/etc/rc.local
- 有些系统可能路径为
/etc/rc.d/rc.local
2. 作用
rc.local
是一个启动脚本,系统启动完成后会以 root 用户权限 执行此文件中的命令。通常用来执行一些初始化任务,例如:
- 自定义启动服务。
- 加载模块。
- 设置硬件参数。
- 挂载特定设备。
3. 文件结构
一个典型的 rc.local
文件内容如下:
#!/bin/bash
# 这个文件由系统启动脚本调用
# 添加要执行的命令echo "System booted at $(date)" >> /var/log/boot.log
exit 0
注意:
- 第一行必须是
#!/bin/bash
,指定解释器。 - 文件中的命令按照顺序依次执行。
- 最后一行应确保包含
exit 0
,表示脚本执行成功。
4. 文件权限
rc.local
文件必须是可执行的,否则不会被执行:
chmod +x /etc/rc.local
5. 检查是否启用
在基于 systemd 的系统中(如 Ubuntu 16.04+),rc.local
的支持可能默认被禁用。可以通过以下命令检查:
systemctl status rc-local
如果显示服务未激活或不存在,可以手动创建服务单元:
sudo nano /etc/systemd/system/rc-local.service
内容如下:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/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
创建后,启用并启动服务:
sudo systemctl enable rc-local
sudo systemctl start rc-local
6. 典型使用场景
1) 启动自定义服务
#!/bin/bash
service my_custom_service start
exit 0
2) 加载内核模块
#!/bin/bash
modprobe my_module
exit 0
3) 设置网络参数
#!/bin/bash
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up
exit 0
4) 挂载网络共享
#!/bin/bash
mount -t cifs -o username=user,password=pass //192.168.1.10/share /mnt/share
exit 0
7. 调试与日志
如果 rc.local
中的命令未按预期执行,可以通过以下方式调试:
- 添加日志 在脚本中加入:
echo "Running rc.local at $(date)" >> /var/log/rc.local.log
- 检查权限 确保文件可执行:
chmod +x /etc/rc.local
- 检查输出 查看
/var/log/syslog
或/var/log/messages
中的错误信息。
8. 替代方法
在一些现代系统中,rc.local
的功能逐渐被以下方法替代:
-
crontab
使用@reboot
选项:@reboot /path/to/command
-
systemd
服务 创建自定义服务文件,代替rc.local
:[Unit] Description=My Custom Script After=multi-user.target[Service] Type=simple ExecStart=/path/to/script.sh[Install] WantedBy=multi-user.target
总结
rc.local
是一个简单而强大的工具,适用于特定场景下的启动任务。但在现代系统中,为了提高可维护性和兼容性,建议逐步迁移到更现代的工具(如 systemd)。