Ubuntu 12.04 Server 的 rc.local 問題 - Linux

Table of Contents

※ 引述《isnora (nora)》之銘言:
: 希望有人可以救救我
: 我手邊有一台新裝的 Ubuntu 12.0.4 LTS Server
: 但很奇怪的是,不管我怎麼修改,開機時 rc.local 總是只執行第一個指令
: 剩下的都不會執行,但我的另一台舊的 Ubuntu Server 就沒有這個問題。
: 甚至兩台都用一樣的 rc.local 也是只有舊的會執行…… 0rz...
: 下面是我的 rc.local 內容
: /usr/local/bin/mogstored &
: /opt/nginx_ree_1.8.7/sbin/nginx
: su -l mogile -c "/usr/local/bin/mogilefsd -c /etc/mogilefs/mogilefsd.conf -daemon"
: exit 0
: 但是,我如果手動下 /etc/init.d/rc.local start 就可以順利執行
: 因為這個問題,我一直不敢將伺服器換過去,希望有人可以救一下~

真是抱歉,經過了五、六個小時的重開機,我終於知道原因了…

我看 rc.local 的說明,它上面寫說在所有的程序都執行完畢之後才會去跑

rc.local……,結果在 12.0.4.1 好像不是這麼一回事……這麼多年來第一

次遇到這種莫名奇妙的事 0rz....

我的 mogstored 在 mysql-server 執行之前就已經開跑,所以它會因為

找不到 mysql.sock 而停止~ 0rz...

最後我的解決方式是在 rc.local 上面加上 sleep 60

然後,就一切都解決了~~~

謝謝各位大德的關心~




--

All Comments

Kyle avatarKyle2012-10-12
因為SysV的架構要逐漸換掉了
Skylar Davis avatarSkylar Davis2012-10-14
原先情況開機完是否真的mysql-server的PID比mogstored大?
Ethan avatarEthan2012-10-17
有沒有可能只是mysql-server啟動花的時間較多,而你並沒有
確保它們的dependency執行順序
Skylar DavisLinda avatarSkylar DavisLinda2012-10-18
真是不經一事不長一智啊…真是有夠詭異的,第一次遇到…
Carol avatarCarol2012-10-22
你理解錯了,rc.local在runlevel 2的最後一個腳本執行完畢之
後會開始運行,runlevel 2是debian/ubuntu的默認運行級別。
Steve avatarSteve2012-10-23
如果你的mysql是用upstart啟動,那它就與runlevel無關
Selena avatarSelena2012-10-27
upstart啟動的腳本在滿足啟動條件時就會啟動
所以很明顯,mysql什麼時候啟動與rc.local運行根本無關
Edwina avatarEdwina2012-10-29
出現先後順序的沖突是非常合情合理的,根本不存在詭异之說
Audriana avatarAudriana2012-10-29
如果你的某個腳本依賴于另外的腳本或服務,這時候你應該:
Quintina avatarQuintina2012-10-30
1 將它置于依賴的服務之後啟動,如果依賴服務從屬于rc.d
Catherine avatarCatherine2012-11-04
你可以將命令寫入rc.local,也可以寫入rc.d,但是序號要大于
被依賴的服務的序號。
Frederic avatarFrederic2012-11-09
如果依賴服務被upstart管理,你可以在腳本內部加入條件判斷
Yedda avatarYedda2012-11-11
但是最合理的方式是也將該命令列入upstart,將其啟動條件設
為在被依賴服務啟動之後再啟動。
Kama avatarKama2012-11-12
例如mysql服務emit一個event叫sql_start
那你這條命令的啟動條件就應該是start on started sql_start
William avatarWilliam2012-11-17
我只想強調一件事,linux下沒有詭异的事,只有你不理解的事