Ubuntu服務(wù)相關(guān)命令(service, update-rc.d, systemctl)
本博客參考了網(wǎng)上的各種資料和man,以及<< How linux works >>一書部分內(nèi)容
init基本說明
- 內(nèi)核啟動(dòng)第一個(gè)用戶空間進(jìn)程是由init開始的,你可以在/sbin目錄下找到init,它主要復(fù)制啟動(dòng)和終止系統(tǒng)中的基礎(chǔ)服務(wù)進(jìn)程.
linux系統(tǒng)中主要的init版本有如下
init類型 |
說明 |
識(shí)別 |
Systemd |
新出現(xiàn)的init,很多l(xiāng)inux發(fā)行版都已經(jīng)或者計(jì)劃轉(zhuǎn)向Systemd |
如果你的系統(tǒng)目錄文件中/usr/lib/systemd和/etc/systemd,說明你有systemd,例如我的ubuntu 17.10就有 |
Upstart |
ubuntu曾經(jīng)使用的init,但是現(xiàn)在已經(jīng)轉(zhuǎn)向了systemd |
系統(tǒng)目錄有/etc/init,而且其中有許多conf文件,說明你的系統(tǒng)有upstart(除非你的系統(tǒng)是debian7,那說明你使用的是System V init),同時(shí),我發(fā)現(xiàn)我的ubuntu 17.10也有這個(gè)目錄,我猜測(cè)可能是為了兼容(此處存疑問,現(xiàn)在的ubuntu的init確實(shí)是systemd) |
System V init |
傳統(tǒng)的init,大多數(shù)的linux發(fā)行版都會(huì)兼容 |
系統(tǒng)有/etc/inittab文件,說明你很可能是System V init |
service 命令
- 說明:執(zhí)行System V init 的腳本,其實(shí)service命令執(zhí)行的腳本就是在/etc/init.d/下的.
命令簡(jiǎn)單用處
sercice SCRIPT COMMAND
實(shí)際上,SCRIPT是在/etc/init.d/ 下的,,而COMMAND可以是start,,stop,,status,,restart,reload,,它們的作用是顯而易見的(例如開啟ssh服務(wù)可以 sudo service ssh start ),。
service --status-all 會(huì)顯示出所有系統(tǒng)服務(wù)列表,,其中”+”代表服務(wù)正在運(yùn)行,,而”-“代表服務(wù)處于關(guān)閉狀態(tài),”?”代表根本沒有狀態(tài)這一說,。(其實(shí)查看運(yùn)行服務(wù)還可以用 ps aux | grep service_name 查看進(jìn)程情況,;如果是網(wǎng)絡(luò)服務(wù),還可以查看端口的監(jiān)聽情況,,執(zhí)行 `netstat -tuln | grep service_name/port_number,例如可以執(zhí)行 netstat -tuln | grep ftp查看端口狀態(tài),,默認(rèn)端口為21)
update-rc.d 命令
- 說明:安裝或者移除 System-V init的腳本連接(可以理解為指向腳本的快捷方式,即
/etc/rc*runlevel*.d/NNname => /etc/init.d/name) ,。你可以通過runlevel 命令查看當(dāng)前的運(yùn)行級(jí)別,,runlevel的概念網(wǎng)上一大堆就不提及了。簡(jiǎn)單來說,,假如我的機(jī)器開機(jī)默認(rèn)會(huì)進(jìn)入runlevel為5的空間(ubuntu圖形界面),,那么就會(huì)在開機(jī)后執(zhí)行/etc/rc5.d/*下所有的腳本(這樣描述有些誤差,其實(shí)此目錄下都是軟鏈接,,指向/etc/init.d/下相對(duì)應(yīng)的腳本),。另外,你還會(huì)發(fā)現(xiàn)這些鏈接的命名規(guī)則很有意思,,一般來說,,K開頭的鏈接是關(guān)閉這個(gè)服務(wù),而S開頭的才是啟動(dòng)這個(gè)服務(wù),。此時(shí)應(yīng)該有疑問,,為什么鏈接都是指向同一個(gè)腳本,但是功能確是截然相反,?網(wǎng)上有人說是這兩個(gè)字母給腳本傳遞了不同的參數(shù),,但其實(shí)這個(gè)過程怎么實(shí)現(xiàn)我還不是很清楚(可以cat一下/etc/init.d/rsyslog的內(nèi)容,這個(gè)shell腳本思路還是很清晰的,,先是定義了各種函數(shù),,然后通過參數(shù)$1運(yùn)用case語句來調(diào)用不同的函數(shù),,此時(shí)你會(huì)發(fā)現(xiàn) service serv_name COMMAND 其實(shí)和 /etc/init.d/serv_name COMMAND 是一樣的)
- 簡(jiǎn)單來說,你可以通過此命令控制開機(jī)自啟動(dòng)服務(wù),。
- 開機(jī)啟動(dòng)服務(wù)(建立軟鏈接):
update-rc.d foobar defaults
- 移除所有軟鏈接:
update-rc.d foobar remove
- 關(guān)閉開機(jī)啟動(dòng)服務(wù):
update-rc.d foobar disable
- 重新開啟開機(jī)啟動(dòng)服務(wù):
update-rc.d foobar enable
systemd命令
- 許多l(xiāng)inux的distributions都已經(jīng)轉(zhuǎn)投systemd了,而ubuntu自從15.04版本以后都使用了systemd.
只介紹常見常用的命令:
- 打開服務(wù):
sudo systemctl start foobar
- 關(guān)閉服務(wù):
sudo systemctl stop foobar
- 重啟服務(wù):
sudo systemctl restart foobar
- 不中斷正常功能下重新加載服務(wù):
sudo systemctl reload foobar
- 設(shè)置服務(wù)的開機(jī)自啟動(dòng):
sudo systemctl enable foobar
- 關(guān)閉服務(wù)的開機(jī)自啟動(dòng):
sudo systemctl disable foobar
- 查看活躍的單元:
systemctl list-units
- 查看某個(gè)服務(wù)的狀態(tài):
systemctl status foobar
|