[Linux]在/etc/rc.local內加入開機執行的背景程式
參考資料:
http://serverfault.com/questions/9563/bash-code-in-rc-local-not-excuting-after-bootup
http://unix.stackexchange.com/questions/14993/how-do-i-start-my-service-at-boot-time
http://www.linuxmisc.com/27-openbsd/1383bfded6bcc0f0.htm
若是發現開機程序跑完,登入後沒看到程式出現,可以做下列循序檢查:
1.先檢查rc.local是不是真的有跑,加一行簡單程式像是echo或是touch或mkdir。
2.背景程式要是要花很多時間啟動,有些script可能會停止花太長時間的程式。
3.登入後在sh下執行 /bin/sh /etc/rc.local 跑完看背景程式有沒有出來。
(我卡在這裡,開機時有程式啟動成功訊息,但登入後程序消失,在sh下跑rc.local就有活著)
4.檢查錯誤訊息如/var/log/messages
5.檢查script內有沒有用一些環境變數如$PATH,在sh下正常,但rc.local下可能不同。
可以自己寫小程式,內含sleep一段時間/啟動和結束訊息,然後在rc.local下實驗:
/usr/bin/foo &
開機時和有沒有正常啟動,登入後ps看有沒有活著。
目前查的結果"應該"就是rc.local結束後會砍child process,
導致利用"&"以及傳統fork方式做背景執行的程式被砍。
最快的解法就是執行時前面加nohup。
nohup /usr/bin/foo &
(這方法沒實驗,因為我是在精簡系統上,居然沒nohup可以用...)
這次採用的方式是利用程式內加入daemon()達成背景執行(man daemon),
利用這個函式之後就可以活過rc.local結束了。
0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁