Linux入門進階第四天——服務管理
以下均基於CentOS6.3,其中有部分命令已經過時,在CentOS7中不再使用,請註意
【更新】:CentOS7改變:
CentOS 7.0中一個最主要的改變,就是切換到了systemd。它用於替代紅帽企業版Linux前任版本中的SysV和Upstart,對系統和服務進行管理。systemd兼容SysV和Linux標準組的啟動腳本。
Systemd是一個Linux操作系統下的系統和服務管理器。它被設計成向後兼容SysV啟動腳本,並提供了大量的特性,如開機時平行啟動系統服務,按需啟動守護進程,支持系統狀態快照,或者基於依賴的服務控制邏輯。
先前的使用SysV初始化或Upstart的紅帽企業版Linux版本中,使用位於 /etc/rc.d/init.d/目錄中的bash初始化腳本進行管理。而在RHEL 7/CentOS 7中,這些啟動腳本被服務單元取代了。服務單元以.service文件擴展結束,提供了與初始化腳本同樣的用途。要查看、啟動、停止、重啟、啟用或者禁用系統服務,你要使用systemctl來代替舊的service命令。
註:為了向後兼容,舊的service命令在CentOS 7中仍然可用,它會重定向所有命令到新的systemctl工具——總管。
使用systemctl來啟動/停止/重啟服務
要啟動一個服務,你需要使用如下命令:
# systemctl start httpd.service
這會啟動httpd服務,就我們而言,Apache HTTP服務器。
要停掉它,需要以root身份使用該命令:
# systemctl stop httpd.service
要重啟,你可以使用restart選項,如果服務在運行中,它將重啟服務;如果服務不在運行中,它將會啟動。
你也可以使用try-start選項,它只會在服務已經在運行中的時候重啟服務。同時,reload選項你也可以有,它會重新加載配置文件。
# systemctl restart httpd.service
# systemctl try-restart httpd.service
# systemctl reload httpd.service
我們例子中的命令看起來會像下面這樣:
檢查服務狀態
要檢查服務狀態,你可以使用status選項,看這裏:
# systemctl status httpd.service
輸出結果就像這樣:
它會告訴你運行中的服務的方方面面。
使用啟用 /禁用服務來控制開機啟動
你也可以使用enable/disable選項來控制一個服務是否開機啟動,命令如下:
# systemctl enable httpd.service
# systemctl disable httpd.service
更多systemd的相關介紹,參考:http://blog.51cto.com/xiaoli110/1629533
更多命令等其他的差異,參考:https://www.cnblogs.com/bethal/p/5945026.html
一,大綱
二、簡介與分類
1.運行級別
0-6一共6個運行級別
# 0 - 停機 ,機器關閉。
# 1 - 單用戶模式 。就像Win9x下的安全模式類似
# 2 - 多用戶,但是沒有NFS 進入無網絡服務的多用戶模式
# 3 - 完全多用戶模式 ,是標準的運行級。
# 4 - 沒有用到 ,一般不用,在一些特殊情況下可以用它來做一些事情。例如在筆記本 電腦的電池用盡時,可以切換到這個模式來
# 5 - X11 ,進到X Window系統了。
# 6 - 重新啟動 ,運行init 6機器就會重啟
init一般在系統啟動時自動運行,也可以由root用戶調用。它的作用是切換系統的運行狀態。
它的命令格式是:init NUM〈回車〉,其中NUM表示1到6的任一數字
//3級別就是我們常用的字符界面(默認級別),7級別就是我們的標準的圖形界面
當然是可以設置默認級別的,CentOS7的具體配置暫不列出(修改相關配置文件即可)
2.服務的分類
//絕大多數服務都是獨立的服務,xinetd是一個超級守護進程(CentOS7已基本棄用)
centos7中的systemd服務類型分類:
擴展名 主要服務功能 .service 一般服務類型 (service unit):主要是系統服務,包括服務器本身所需要 的本機服務以及網絡服務都是!比較經常被使用到的服務大多是這種類 型! 所以,這也是最常見的類型了! .socket 內部程序數據交換的插槽服務 (socket unit):主要是 IPC (Inter- process communication) 的傳輸訊息插槽檔 (socket file) 功能。 這種 類型的服務通常在監控訊息傳遞的插槽檔,當有通過此插槽檔傳遞訊息來 說要鏈接服務時,就依據當時的狀態將該用戶的要求傳送到對應的 daemon, 若 daemon 尚未啟動,則啟動該 daemon 後再傳送用戶的要 求。使用 socket 類型的服務一般是比較不會被用到的服務,因此在開機時 通常會稍微延遲啟動的時間 (因為比較沒有這麽常用嘛!)。一般用於本 機服務比較多,例如我們的圖形界面很多的軟件都是通過 socket 來進行本 機程序數據交換的行為。 (這與早期的 xinetd 這個 super daemon 有部份 的相似喔!) .target 執行環境類型 (target unit):其實是一群 unit 的集合,例如上面表格中 談到的 multi-user.target 其實就是一堆服務的集合~也就是說, 選擇執行 multi-user.target 就是執行一堆其他 .service 或/及 .socket 之類的服務就是 了! .mount .automount 文件系統掛載相關的服務 (automount unit / mount unit):例如來自網絡 的自動掛載、NFS 文件系統掛載等與文件系統相關性較高的程序管理。 .path 偵測特定文件或目錄類型 (path unit):某些服務需要偵測某些特定的目 錄來提供佇列服務,例如最常見的打印服務,就是通過偵測打印佇列目錄 來啟動打印功能! 這時就得要 .path 的服務類型支持了! .timer 循環執行的服務 (timer unit):這個東西有點類似 anacrontab 喔!不過 是由 systemd 主動提供的,比 anacrontab 更加有彈性!View Code
查看安裝的服務:
//RPM包和源碼包的安裝位置是不同的,所以最好分開單獨對待
3.服務與端口
端口的概念:
查看系統中開啟的服務:
可以使用 netstjart -a查看所有
其中:established,是已經連接的
三、RPM包服務管理
1.獨立服務管理
RPM包常見默認目錄(當然並非絕對,是由編寫此RPM的人員決定放在哪合理便放在哪):
獨立服務的啟動方式:
實例:
查看所有腳本:
使用絕對路徑啟動
+後面的選項可以啟動重啟等
//有一個不能解析本機主機的報錯,不影響正常啟動
例如:通過service啟動(推薦)
service httpd start
//必須註意,通過service啟動是redhat系列的才有此項,標準的啟動命令還是前一種。
而中間的服務名之所以叫 httpd,指的是這是一個守護進程 deamon
並且,service不能啟動源碼包(不是默認位置,無法正確找到服務腳本)
【更新】:
centos 7以後就用systemctl start httpd 了 ,systemctl代替service和chkconfig了,跟課程不太一樣,註意哦!
有很多命令,CentOS7中都已改變,這裏就不列出如何自啟動的命令了(與CentOS6完全不同!)
systemctl請參見:http://www.cnblogs.com/zhming26/p/6155201.html
手冊大全請參見:http://man.linuxde.net/par/5
2.xinetd服務
基本已消失(此處就不展開了)
四、源碼包服務管理
由於安裝位置的不同,默認的源碼包是不能使用RPM包的管理方式進行啟動的
服務的啟動:
//服務的安裝說明腳本裏就已經說明了如何啟動(一般都是通過絕對路徑找到啟動腳本進行啟動)
服務的自啟動:
示例:
如何強行讓源碼包讓service(註意是centos6)識別
五、小結
xmind思維導圖:
六、centOS7的補充服務管理——systemctl
systemctl語法介紹:
[root@study ~]# systemctl [command] [unit]
command 主要有:
start :立刻啟動後面接的 unit
stop :立刻關閉後面接的 unit
restart :立刻關閉後啟動後面接的 unit,亦即執行 stop 再 start 的意思
reload :不關閉後面接的 unit 的情況下,重新載入配置文件,讓設置生效
enable :設置下次開機時,後面接的 unit 會被啟動
disable :設置下次開機時,後面接的 unit 不會被啟動
status :目前後面接的這個 unit 的狀態,會列出有沒有正在執行、開機默認執行否、登錄等信息等!
is-active :目前有沒有正在運行中
is-enable :開機時有沒有默認要啟用這個 unit
範例一:看看目前 atd 這個服務的狀態為何?
[root@study ~]# systemctl status atd.service
atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: active (running) since Mon 2015-08-10 19:17:09 CST; 5h 42min ago
Main PID: 1350 (atd)
CGroup: /system.slice/atd.service
└─1350 /usr/sbin/atd -f
Aug 10 19:17:09 study.centos.vbird systemd[1]: Started Job spooling tools.
# 重點在第二、三行喔~
# Loaded:這行在說明,開機的時候這個 unit 會不會啟動,enabled 為開機啟動,disabled 開機不會啟動
# Active:現在這個 unit 的狀態是正在執行 (running) 或沒有執行 (dead)
# 後面幾行則是說明這個 unit 程序的 PID 狀態以及最後一行顯示這個服務的登錄文件信息!
# 登錄文件信息格式為:“時間” “訊息發送主機” “哪一個服務的訊息” “實際訊息內容”
# 所以上面的顯示訊息是:這個 atd 默認開機就啟動,而且現在正在運行的意思!
範例二:正常關閉這個 atd 服務
[root@study ~]# systemctl stop atd.service
[root@study ~]# systemctl status atd.service
atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: inactive (dead) since Tue 2015-08-11 01:04:55 CST; 4s ago
Process: 1350 ExecStart=/usr/sbin/atd -f $OPTS (code=exited, status=0/SUCCESS)
Main PID: 1350 (code=exited, status=0/SUCCESS)
Aug 10 19:17:09 study.centos.vbird systemd[1]: Started Job spooling tools.
Aug 11 01:04:55 study.centos.vbird systemd[1]: Stopping Job spooling tools...
Aug 11 01:04:55 study.centos.vbird systemd[1]: Stopped Job spooling tools.
# 目前這個 unit 下次開機還是會啟動,但是現在是沒在運行的狀態中!同時,
# 最後兩行為新增加的登錄訊息,告訴我們目前的系統狀態喔!
Linux入門進階第四天——服務管理