网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
当你在 Linux 系统的 `/etc/rc.local` 文件中添加命令,但这些命令不执行,并且 `rc-local.service` 启动失败时,你可以按照以下步骤进行故障排查和解决:
### 1. 检查 `/etc/rc.local` 文件的权限和内容
确保 `/etc/rc.local` 文件是可执行的,并且具有正确的权限。通常,这个文件应该有执行权限,并且以 root 用户身份运行。
```bash
sudo chmod +x /etc/rc.local
```
检查 `/etc/rc.local` 文件的内容,确保它有一个明确的 `exit 0` 语句作为最后一个命令,以确保脚本正常退出。
```bash
sudo cat /etc/rc.local
```
确保文件中没有语法错误,并且所有命令都适合在启动时执行。
### 2. 检查 systemd 的 `rc-local.service`
在较新的 Linux 发行版中,`/etc/rc.local` 可能不再默认启用,而是使用 systemd 的 `rc-local.service` 来控制。你需要确保这个服务是启用的。
首先,检查 `rc-local.service` 文件是否存在,并查看其内容。这个文件通常位于 `/lib/systemd/system/` 或 `/etc/systemd/system/`。
```bash
sudo cat /lib/systemd/system/rc-local.service
```
或者,如果你的系统中有自定义的 `rc-local.service`,请查看 `/etc/systemd/system/` 目录。
确保 `rc-local.service` 文件中正确引用了 `/etc/rc.local`。通常,它应该看起来像这样:
```ini
[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
```
注意:`ExecStart` 应该直接指向 `/etc/rc.local`,而不是使用 `start` 参数(除非你有特殊的包装脚本)。
### 3. 启用并启动 `rc-local.service`
如果 `rc-local.service` 文件看起来没问题,尝试启用并启动服务:
```bash
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
```
然后检查服务的状态:
```bash
sudo systemctl status rc-local.service
```
### 4. 查看日志
如果服务仍然失败,查看系统日志以获取更多信息:
```bash
journalctl -u rc-local.service
```
或者,查看 `/var/log/syslog` 或 `/var/log/messages`(取决于你的 Linux 发行版)。
### 5. 确保没有其他服务冲突
有时,其他服务可能会干扰 `rc-local.service` 的运行。确保没有其他服务或脚本正在尝试同时修改或依赖 `rc.local` 中的资源。
### 6. 考虑使用其他方法
如果 `rc.local` 和 `rc-local.service` 持续引发问题,你可以考虑使用 systemd 的其他功能来运行你的启动脚本,例如创建自定义的 systemd 服务单元。
1、将/etc/rc.local的命令改成更加兼容的模式,将"#!/bin/sh"改为"#!/bin/bash"
2、将/bin/sh重新链接到/bin/bash,方法如下:
方法一:终端执行 sudo dpkg-reconfigure dash,然后选择 no.
方法二:重新进行软链接,执行以下命令:
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
这样就将/bin/sh链接到了/bin/bash。reboot系统后,命令正常执行
我使用的是第一个方法连接的,实测可用。
此时,开机自启后,可以看到相应目录下的test.txt里被写入了指定内容。
添加我为好友,拉您入交流群!
请使用微信扫一扫!