2017年2月21日 星期二

Init Script for OpenWrt,新增一個自己的init script

在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是一直在執行的!!!




沒有留言:

張貼留言