在OpenWrt的系統中,一開機會被執行的Script都會放在/etc/init.d/ 裡面,而當系統開機過程當中,會先去檢查/etc/rc.d/ 裡面,裡面便是告訴系統要做哪些process,而/etc/rc.d/ 裡的檔案都只是個link檔,連結到../init.d/中的process,從/etc/rc.d/裡面的link我們可以知道有哪些開機script會去做
接著我們來實作一個每隔20秒就印出一個 "Hello"的程式(Daemon?)
首先我們要實作的這個題目,我們無法將while loop寫在開機叫起來的這個script裡面,我嘗試過這樣寫,但是開機過程會導致系統開不到console的部分。
所以我們分程兩部分寫:
1. 先寫一個開機script叫做Hello_script.sh,我們在這個script再去呼叫另外一個有while loop 的Hello.sh
2. Hello.sh就負責每20秒印一次Hello訊息到console
以下是實際的範例:(注意第一行一定要有,才有辦法在OpenWrt裡順利執行)
================== Hello_script.sh =====================
#!/bin/sh /etc/rc.common
START=99
STOP=99
start()
{
/sbin/Hello.sh &
}
stop()
{
killall Hello.sh
echo "===== stop Hello.sh ======"
}
========================================================
講解:
首先當你寫完此檔案後,可以先執行 ./etc/init.d/Hello_scrip.sh enable(如果沒辦法做start請先確定上面範例的第一行程式碼有寫 /etc/rc.common嗎)
這樣表示告訴OpenWrt下次開機就要自動執行此script,當enable完之後,你也可以發現在/etc/rc.d/裡面產生了一個link檔叫做K99Hello_script.sh
OpenWrt 每支 Init Script 都有下列指令可以使用:
/etc/init.d/Hello_script.sh
/etc/init.d/Hello_script.sh enable //在開機時就自動執行
/etc/init.d/Hello_script.sh boot
/etc/init.d/Hello_script.sh start //啟動Hello_script.sh
/etc/init.d/Hello_script.sh restart //重新啟動
/etc/init.d/Hello_script.sh stop //停止
/etc/init.d/Hello_script.sh disable //取消開機時就自動執行
而START=99 意思是給此script在開機時的優先順序,99是一個最低的優先權限,STOP也是相同的意思
另外一個Hello.sh內容如下:
====================== Hello.sh ======================
#!/bin/sh
while [ 1 ]
do
echo "Hello!!"
sleep 20
done
=====================================================
這樣就可以讓OpenWrt開機時,自動去做你寫的Daemon了~
此印訊息的範例似乎舉例的不是很好,實際執行起來terminal看不到訊息,但是我們用ps -aux可以確實知道我們的Hello.sh Daemon是一直在執行的!!!
沒有留言:
張貼留言