2015-02-26

Ubuntu 的 /etc/init.d 和 service 指令的差別

阿舍記得,之前在 Ubuntu 上要啟動或停用一些程式的時候,都是用 /etc/init.d 的方式來操作的,不過,後來,不知道為什麼,阿舍在 Ubuntu 的文件上和網路上就看到越來越多人改用 service 指令來取代 /etc/init.d,然後,在最近幾個版本的 Ubuntu 中,如果你用了 /etc/init.d 來操作的話,還會出現訊息說改用 service 指令操作會比較好哩 ! ...


因此,阿舍也從善如流的,就改用這個 service 指令來取代之前用 /etc/init.d 的操作,不過,心中一直有點納悶,為什麼要改用 service 指令呢 ? 阿舍查看了一下,這個 /etc/init.d 資料夾的東西不都還在嗎 ? 這樣改有比較好嗎 ?

Upstart  和 Sysvinit 的 Script 放置在不同的資料夾下 

其實,阿舍在寫這篇之前,已經斷斷續續的去查過有關這個 /etc/init.d 和 service 指令的問題,然後,就知道說是 Ubuntu 想把舊的 sysvinit 啟動系統改成較新的 Upstart 方式,但是,阿舍大概看了一下這個 Upstart 的說明後,就想說 ... 有空再看看好了 ... 呵 !

剛好,這幾天阿舍在看開機啟動的東西,就順便來看了一下,然後,才發現,原來這個 upstart 是 Ubuntu 團隊開發出來要替代 sysvinit 的,而且,遠從 Ubuntu 6.10 版起就開始導入到 Ubuntu 的,另外,包括 Debian、OpenSUSE、RedHat Linux 和 Chrome OS 等都有採用過 Upstart ,不過,漸漸的也都再改採用另一套 systemd 哩 !

Upstart 比起 sysvinit 的好處當然有很多,比較明顯的就是對於同步和非同步的程式啟動能力,傳統的 sysvinit 只能一個接一個方式來啟動和關閉程式,因此,開關的速度明顯受到限制,而 Upstart 是以事件導向的方式來啟動和關閉服務,所以,可以同時進行多個程式的開啟和關閉,開關機速度也就比較快哩 !

另外,就是對於開機運行後的程式控管能力,sysvinit 的服務型程式只能在啟動時啟動,在關機時才能關閉,所以,造成很多問題,像是早期的 USB 在 Linux 上無法熱插拔的情形,而 Upstart 則是不會有這樣的問題哩 !

不過,除非你是有要自己寫個啟動的 Script 來用,否則,是不太需要理會這些東西的,Ubuntu 上的 sysvinit 的啟動 Script 大多已經被包了一層來支援 Upstart 了,所以,只要用 service 指令或直接用 start 和 stop 指令就可以來啟動和關閉程式了 !

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁