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里被写入了指定内容。
当在Linux系统的`rc.local`文件中添加的命令不执行,并且`rc-local.service`(在某些系统中可能是`rc-local.service`,而在其他如systemd系统中可能是通过其他方式配置)启动失败时,你可以按照以下步骤进行故障排除:
### 1. 确认`rc.local`的权限和内容
首先,确保`rc.local`文件是可执行的,并且内容格式正确。通常,这个文件位于`/etc/`目录下。
- 修改权限:
```bash
sudo chmod +x /etc/rc.local
```
- 检查内容:
确保文件的第一行是`#!/bin/sh -e`或者类似的shebang行,用于指定解释器。接着是你的命令。
```bash
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo "Hello, world!" > /tmp/rc.local.test
exit 0
```
### 2. 检查`rc-local.service`(如果使用systemd)
如果你的系统使用systemd,可能需要创建一个或修改`/etc/systemd/system/rc-local.service`文件来确保`rc.local`被正确执行。
- 创建或编辑`rc-local.service`:
```bash
sudo nano /etc/systemd/system/rc-local.service
```
内容可能如下:
```ini
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/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`可能不正确,因为`rc.local`不是一个服务,不需要`start`参数。直接运行`/etc/rc.local`即可。
修改为:
```ini
ExecStart=/etc/rc.local
```
- 重新加载systemd配置并启用服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
```
- 查看服务状态:
```bash
sudo systemctl status rc-local.service
```
### 3. 查看系统日志
如果服务仍然失败,查看系统日志可能会提供更多线索。
- 使用journalctl:
```bash
sudo journalctl -u rc-local.service
```
- 检查/var/log/syslog(如果系统使用syslog):
```bash
sudo cat /var/log/syslog | grep rc.local
```
### 4. 确保命令在终端中运行正常
在`rc.local`中添加的命令应该在终端中直接运行没有问题。如果命令包含环境变量或特定路径,确保这些在启动时是可用的。
### 5. 尝试手动运行`rc.local`
尝试手动运行`/etc/rc.local`来查看是否有错误输出。
- 手动运行:
```bash
sudo /etc/rc.local
```
通过以上步骤,你应该能够诊断并解决`rc.local`文件中的命令不执行以及`rc-local.service`启动失败的问题。
添加我为好友,拉您入交流群!
请使用微信扫一扫!