RHEL7服務管理工具systemctl
從 CentOS 7.x 以後,Red Hat 系列的 distribution 放棄沿用多年的 System V 開機啟動服務的流程,就是init 啟動指令碼的方法,改用 systemd 這個啟動服務管理機制;
基本上,systemd 將過去所謂的 daemon 執行指令碼通通稱為一個服務單位 (unit),而每種服務單位依據功能來區分時,就分類為不同的型別 (type)。 基本的型別有包括系統服務、資料監聽與交換的插槽檔服務 (socket)、儲存系統狀態的快照型別、提供不同類似執行等級分類的操作環境 (target) 等等。 哇!這麼多型別,那設定時會不會很麻煩呢?其實還好,因為配置檔案都放置在底下的目錄中:
l /usr/lib/systemd/system/:每個服務最主要的啟動指令碼設定,有點類似以前的 /etc/init.d 底下的檔案;
l /run/systemd/system/:系統執行過程中所產生的服務指令碼,這些指令碼的優先序要比 /usr/lib/systemd/system/ 高!
l /etc/systemd/system/:管理員依據主機系統的需求所建立的執行指令碼,其實這個目錄有點像以前/etc/rc.d/rc5.d/Sxx 之類的功能!執行優先序又比 /run/systemd/system/ 高喔!
1) systemd 的 unit 型別分類說明
/usr/lib/systemd/system/ 以下的資料如何區分上述所謂的不同的型別 (type) 呢?很簡單!看副檔名!
副檔名 |
主要服務功能 |
.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 更加有彈性! |
2) 如何啟動/關閉、啟用/禁用服務
[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
例如:
啟動一個服務:systemctl start postfix.service
關閉一個服務:systemctl stop postfix.service
重啟一個服務:systemctl restart postfix.service
顯示一個服務的狀態:systemctl status postfix.service
在開機時啟用一個服務:systemctl enable postfix.service
在開機時禁用一個服務:systemctl disable postfix.service
檢視服務是否開機啟動:systemctl is-enabled postfix.service
檢視已啟動的服務列表:systemctl list-unit-files|grep enabled
檢視啟動失敗的服務列表:systemctl --failed
PS:使用命令 systemctl is-enabled postfix.service 得到的值可以是enable、disable或static,這裡的 static 它是指對應的 Unit 檔案中沒有定義[Install]區域,因此無法配置為開機啟動服務。說明:啟用服務就是在當前“runlevel”的配置檔案目錄/etc/systemd/system/multi-user.target.wants/裡,建立/usr/lib/systemd/system裡面對應服務配置檔案的軟連結;
禁用服務就是刪除此軟連結,
新增服務就是新增軟連線。如下:
#systemctl disable nfs-server.service
rm '/etc/systemd/system/multi-user.target.wants/nfs-server.service'
#systemctl enable nfs-server.service
ln -s '/usr/lib/systemd/syste/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service'
3) 檢視所有unit服務
[root@study ~]# systemctl
[root@study ~]# systemctl list-unit-files
[root@study ~]# systemctl list-units --type=service --all
[root@study ~]#systemctl list-units --type=target --all
systemd 也提供了數個簡單的指令給我們切換操作模式之用喔! 大致上如下所示:
[root@study ~]# systemctl poweroff 系統關機
[root@study ~]# systemctl reboot 重新啟動
[root@study ~]# systemctl suspend 進入暫停模式
[root@study ~]# systemctl hibernate 進入休眠模式
[root@study ~]# systemctl rescue 強制進入救援模式
[root@study ~]# systemctl emergency 強制進入緊急救援模式
4) 檢視服務依賴性
systemctl list-dependencies [unit] [--reverse]
[root@study ~]# systemctl list-dependencies –reverse
選項與引數: --reverse :反向追蹤誰使用這個 unit 的意思!
systemd-cgls以樹形列出正在執行的程式,它可以遞迴顯示控制組內容。
參考文獻:
【1】 RHEL 7 中 systemctl 的用法(替代service 和 chkconfig),http://blog.csdn.net/catoop/article/details/47318225
【2】 systemctl 命令完全指南,
【3】 鳥哥的Linux私房菜-基礎篇.第四版,17.2 透過 systemctl 管理服務
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2130219/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Systemctl幾個操作服務命令
- 使用Systemctl命令來管理系統服務
- linux系統服務(systemctl)的使用Linux
- RHEL7原始碼安裝Apache服務原始碼Apache
- CentOS7使用systemctl新增自定義服務CentOS
- 使用unbound在RHEL7上搭建DNS服務DNS
- Linux中如何使用systemctl進行服務的管理?Linux
- web影像化服務管理工具Web
- systemctl 命令在 Linux 中啟動、停止和重新啟動服務Linux
- linux中透過systemctl建立服務並實現開機啟動Linux
- Docker 服務終端 UI 管理工具DockerUI
- 初識 Istio - 服務網格管理工具
- Nginx Windows版的服務安裝和管理工具NginxWindows
- E8.ITSM 運維服務管理工具介紹運維
- mysql服務啟動報錯Redirecting to systemctl start mysqld.serviceFailed to start mysqld.service:Unit not found.MySqlAI
- rhel7 udevdev
- systemctl 命令完全指南
- CentOS7.9 systemctlCentOS
- systemctl用法及其語法
- linux19-systemctlLinux
- MacGTD任務管理工具Mac
- RHEL7網路管理
- service和systemctl的區別
- CentOS 7 systemctl 命令總結CentOS
- Linux systemctl 命令完全指南Linux
- rhel7破解密碼解密密碼
- RHEL7 官方文件地址
- 微服務的服務間通訊與服務治理微服務
- [翻譯]微服務設計模式 - 5. 服務發現 - 服務端服務發現微服務設計模式服務端
- docker內服務訪問宿主機服務Docker
- linux服務之NFS和SAMBA服務LinuxNFSSamba
- 服務計算 SO 服務的設計
- ejb服務能否轉換成socket服務?
- go微服務系列(二) - 服務註冊/服務發現Go微服務
- 服務端指南 服務端概述 | 微服務架構概述服務端微服務架構
- dns服務DNS
- 服務物件物件
- 服務-mysqlMySql