initctl 建立自己的JOB

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   使用   java   ar   strong   

我們的項目需要一個啟動一個外部的Jetty server。發現每次kill了這個jetty的進程後,系統會自動啟動一個jetty。追查下去發現,原來是在/etc/init.d/jetty 指令碼的start 函數裡 使用了

initctl start jetty

而我們預想的start函數實現是這樣的:

java -jar start.jar

開來古怪就在initctl了。為了說清楚initctl,我們需要先回顧一下曆史。

在SystemV這個版本的unix中,系統啟動首先是啟動init進程。這個進程會按照runlevle啟動/etc/rc[0-6].d 目錄下的指令碼。這裡rc後面的數字就是runlevel。舉個例子,在圖形介面開啟以前,runlevel=5;如果系統啟動了圖形介面,那麼runlevel就進入到6.那麼/etc/rc6.d裡面的指令碼就會被一個一個的執行。這些指令碼其實都是到/etc/init.d/下的指令碼的軟連結。

注意上面講到啟動順序是一個一個的執行,這不可避免的帶來串列的時間開銷。於是有了System V init 的改進版 “upstart”. initctl 就是upstart提供的一個命令。upstart 的一個最佳化就是使用的事件驅動,這樣啟動服務A的時候,不用等待A的結束就可以啟動服務B了。在upstart的概念裡,我們把服務稱作JOB。使用命令

initctl start JOB

啟動的JOB以init進程為父進程。當JOB的進程被殺死後,init進程會自動重新啟動JOB。這就是 initctl start JOB 和 service JOB start 的主要區別吧。

那麼如何建立一個自己的JOB呢?

需要在/etc/init/目錄下建立一個.conf 檔案。比如說我們的JOB叫 mywork。那麼需要建立檔案/etc/init/mywork.conf

下面給一個mywork.conf的例子:

exec python -m SimpleHTTPServer 8111

這端代碼會啟動一個http server監聽 8111 連接埠。

建立了檔案後,可以運行命令 initctl start mywork, 這樣8111連接埠就被監聽了。可以試試 curl localhost:8111,你會收到一段SimpleHTTPServer提供的預設HTML。你也可以嘗試這殺掉監聽8111連接埠的進程,不過很快指令碼mywork.conf就會重新啟動監聽8111連接埠。

怎麼寫mywork.conf 呢? 可以參考一下:http://www.mike.org.cn/articles/understand-upstart/

initctl 建立自己的JOB

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.