ubuntu rc.local 無效 解決方案(轉)


為了讓mysql開機啟動,我將mysql命令添加到/etc/rc.local中,但怎么也運行不了。一開始認為只是/etc/rc.local的權限問題,但通過以下命令修改后,還是不起作用。

sudo chmod +x /etc/rc.local  // 增加可執行權限
sudo chmod +s /etc/rc.local  // 讓普通用戶執行該文件時擁有文件所有者的權限

      后來Google之后才發現是Ubuntu默認的dash在作怪:
#ls -al /bin/sh 
lrwxrwxrwx 1 root root 4 2009-12-11 06:04 /bin/sh -> dash
#ls -al /bin/dash
-rwxr-xr-x 1 root root 92132 2009-09-21 07:49 /bin/dash


      可以看出Ubuntu默認將/bin/sh鏈接到/bin/dash,而/etc/rc.local腳本中用的正是/bin/sh,導致出錯,可以將/etc/rc.local的命令改成更加兼容的模式,或者直接將/bin/sh鏈接到/bin/bash。
/usr/bin/mystar >& /dev/null &         # dash報錯,bash和csh不會報錯
/usr/bin/mystar > /dev/null 2>&1     # dash兼容


      其實,從 Ubuntu 6.10開始,Ubuntu就將先前默認的bash shell 更換成了dash shell,其表現為 /bin/sh 鏈接倒了/bin/dash而不是傳統的/bin/bash。Ubuntu dgy是第一個將dash作為默認shell來發行的版本,這似乎是受了debian的影響。wiki 里面有官方的解釋,https://wiki.ubuntu.com/DashAsBinSh,主要原因是dash更小,運行更快,還與POSIX兼容。但目前存在的問題是,由於shell的更換,致使很多腳本出錯,畢竟現在的很多腳本不是100%POSIX兼容。

      將默認的shell改成bash的方法: 

方法1:在終端執行 sudo dpkg-reconfigure dash,然后選擇 no.

方法2:重新進行軟鏈接:

sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM