Linux rc.local 命令不执行
米扑科技,这两天需要在Ubuntu中配置开机启动的命令,有很多方式
在rc.local中配置是比较简单方便的一种,所以打算使用rc.local的方式进行配置。
简介
/etc/rc.local 实际上是一个文件软链接,指向真实的文件是 /etc/rc.d/rc.local
# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 8月 14 00:20 /etc/rc.local -> rc.d/rc.local # ll /etc/rc.d/rc.local -rw-r--r--. 1 root root 615 11月 21 10:18 /etc/rc.d/rc.local
开机脚本不执行(一)
有时,在 /etc/rc.local 文件里设置脚本后,发现不执行脚本,原因是没有给 /etc/rc.d/rc.local 授权为可执行
如上,发现 /etc/rc.local(软链文件)是可执行状态,但是 /etc/rc.d/rc.local(真实文件)不是可执行状态
因此,授权 /etc/rc.d/rc.local 为可执行状态:
chmod +x /etc/rc.d/rc.local
以后设置脚本也直接放到 /etc/rc.d/rc.local 里,且脚本也设置为可执行状态:
chmod +x /root/script/xxxx.sh
开机脚本不执行(二)
rc.local 配置完后,却发现配置的sh脚本始终不执行,开始怀疑是rc.local没执行,用echo打印了些信息,发现都执行了。
这就造成了我的困惑,网上查了好多解决方案,试了好多种方法,最终发现是有shell的问题造成的。
有些命令需要在bash shell中运行,而不能在dash中运行。
从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)
而不是bash(the GNUBourne-Again Shell).
但Login Shell还是bash
使用命令查了下,看到/bin/sh链接到了/bin/dash(如下)
$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 2月 19 2014 /bin/sh -> dash
$ ls -al /bin/dash
-rwxr-xr-x 1 root root 121272 2月 19 2014 /bin/dash
$ echo $SHELL
/bin/bash
而/etc/rc.local脚本中用的正是/bin/sh,导致命令无法运行。
$ head /etc/rc.local #!/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.
解决方案:
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
sudo reboot 系统后,命令正常执行
最后注意,如果你在rc.local 中执行脚本的话,
必须使用sudo chmod +x 给脚本增加执行权限。
sudo chmod +x /home/homer/script/mimvp_proxy.sh
有很多人可能会忽略这个问题。
总结
以上方法,在我的Ubuntu 14.04系统反复配置多次,仍然不行,开机无法执行
最后的解决方案,参考 Ubuntu 14.04 设置开机启动脚本
1. 把 /etc/rc.local 改名自定义的 /etc/rc_mimvp.sh
sudo cp /etc/rc.local /etc/init.d/rc_mimvp.sh
sudo chmod +x /etc/init.d/rc_mimvp.sh
2. 将脚本添加到启动脚本
cd
/etc/init
.d/
sudo
update-rc.d
rc_mimvp.sh defaults 90
3. 如果要移除启动脚本
sudo
update-rc.d -f
rc_mimvp.sh remove
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-11-21 12:50:03
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!