Re: [問題] Ubuntu 12.04 Server 的 rc.local 問題

看板Linux作者 (nora)時間11年前 (2012/10/10 19:45), 編輯推噓1(1020)
留言21則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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 然後,就一切都解決了~~~ 謝謝各位大德的關心~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.250.107.138

10/10 20:56, , 1F
因為SysV的架構要逐漸換掉了
10/10 20:56, 1F

10/10 21:09, , 2F
原先情況開機完是否真的mysql-server的PID比mogstored大?
10/10 21:09, 2F

10/10 21:10, , 3F
有沒有可能只是mysql-server啟動花的時間較多,而你並沒有
10/10 21:10, 3F

10/10 21:10, , 4F
確保它們的dependency執行順序
10/10 21:10, 4F

10/10 21:55, , 5F
真是不經一事不長一智啊…真是有夠詭異的,第一次遇到…
10/10 21:55, 5F

10/19 03:26, , 6F
你理解錯了,rc.local在runlevel 2的最後一個腳本執行完畢之
10/19 03:26, 6F

10/19 03:26, , 7F
後會開始運行,runlevel 2是debian/ubuntu的默認運行級別。
10/19 03:26, 7F

10/19 03:27, , 8F
如果你的mysql是用upstart啟動,那它就與runlevel無關
10/19 03:27, 8F

10/19 03:28, , 9F
upstart啟動的腳本在滿足啟動條件時就會啟動
10/19 03:28, 9F

10/19 03:28, , 10F
所以很明顯,mysql什麼時候啟動與rc.local運行根本無關
10/19 03:28, 10F

10/19 03:29, , 11F
出現先後順序的沖突是非常合情合理的,根本不存在詭异之說
10/19 03:29, 11F

10/19 03:30, , 12F
如果你的某個腳本依賴于另外的腳本或服務,這時候你應該:
10/19 03:30, 12F

10/19 03:31, , 13F
1 將它置于依賴的服務之後啟動,如果依賴服務從屬于rc.d
10/19 03:31, 13F

10/19 03:32, , 14F
你可以將命令寫入rc.local,也可以寫入rc.d,但是序號要大于
10/19 03:32, 14F

10/19 03:32, , 15F
被依賴的服務的序號。
10/19 03:32, 15F

10/19 03:33, , 16F
如果依賴服務被upstart管理,你可以在腳本內部加入條件判斷
10/19 03:33, 16F

10/19 03:34, , 17F
但是最合理的方式是也將該命令列入upstart,將其啟動條件設
10/19 03:34, 17F

10/19 03:34, , 18F
為在被依賴服務啟動之後再啟動。
10/19 03:34, 18F

10/19 03:35, , 19F
例如mysql服務emit一個event叫sql_start
10/19 03:35, 19F

10/19 03:35, , 20F
那你這條命令的啟動條件就應該是start on started sql_start
10/19 03:35, 20F

10/19 03:36, , 21F
我只想強調一件事,linux下沒有詭异的事,只有你不理解的事
10/19 03:36, 21F
文章代碼(AID): #1GTL_6ro (Linux)
文章代碼(AID): #1GTL_6ro (Linux)