- Linux管理員教程
- 首頁
- CentOS概述
- 基本的CentOS Linux命令
- 檔案/資料夾管理
- 使用者管理
- 配額管理
- Systemd 服務啟動和停止
- 使用systemctl進行資源管理
- 使用cgroups進行資源管理
- 程序管理
- 防火牆設定
- 在CentOS Linux中配置PHP
- 在CentOS Linux中設定Python
- 在CentOS Linux中配置Ruby
- 為CentOS Linux設定Perl
- 安裝和配置Open LDAP
- 建立SSL證書
- 安裝Apache Web伺服器CentOS 7
- 在CentOS 7上設定MySQL
- 設定Postfix MTA和IMAP/POP3
- 安裝匿名FTP
- 遠端管理
- CentOS中的流量監控
- 日誌管理
- 備份和恢復
- 系統更新
- Shell指令碼
- 包管理
- 卷管理
- Linux管理員有用資源
- Linux管理員 - 快速指南
- Linux管理員 - 有用資源
- Linux管理員 - 討論
Systemd 服務啟動和停止
systemd是Linux上執行服務的新方法。systemd已經取代了sysvinit。systemd為Linux帶來了更快的啟動時間,並且現在是管理Linux服務的標準方法。雖然穩定,但systemd仍在不斷發展。
systemd作為初始化系統,用於管理Linux核心啟動後需要狀態更改的服務和守護程序。狀態更改包括啟動、停止、重新載入和調整服務狀態。
首先,讓我們檢查一下當前在我們的伺服器上執行的systemd的版本。
[centos@localhost ~]$ systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN [centos@localhost ~]$
截至本文撰寫時,CentOS 7版本已完全更新,systemd版本219是當前的穩定版本。
我們還可以使用systemd-analyze分析上次伺服器啟動時間。
[centos@localhost ~]$ systemd-analyze Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s [centos@localhost ~]$
當系統啟動時間較慢時,我們可以使用systemd-analyze blame命令。
[centos@localhost ~]$ systemd-analyze blame 40.882s kdump.service 5.775s NetworkManager-wait-online.service 4.701s plymouth-quit-wait.service 3.586s postfix.service 3.121s systemd-udev-settle.service 2.649s tuned.service 1.848s libvirtd.service 1.437s network.service 875ms packagekit.service 855ms gdm.service 514ms firewalld.service 438ms rsyslog.service 436ms udisks2.service 398ms sshd.service 360ms boot.mount 336ms polkit.service 321ms accounts-daemon.service
在使用systemd時,瞭解單元的概念非常重要。單元是systemd知道如何解釋的資源。單元分為以下12種類型:
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
在大多數情況下,我們將使用.service作為單元目標。建議對其他型別進行進一步的研究。因為只有.service單元適用於啟動和停止systemd服務。
每個單元都在以下位置的檔案中定義:
/lib/systemd/system - 基本單元檔案
/etc/systemd/system - 執行時啟動的修改後的單元檔案
使用systemctl管理服務
要使用systemd,我們需要非常熟悉systemctl命令。以下是systemctl最常用的命令列開關。
| 開關 | 動作 |
|---|---|
| -t | 單元型別的逗號分隔值,例如service或socket |
| -a | 顯示所有已載入的單元 |
| --state | 顯示處於定義狀態的所有單元,例如:load、sub、active、inactive等。 |
| -H | 遠端執行操作。指定主機名或主機和使用者,用@分隔。 |
基本的systemctl用法
systemctl [operation] example: systemctl --state [servicename.service]
快速檢視我們機器上執行的所有服務。
[root@localhost rdc]# systemctl -t service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher abrtd.service loaded active running ABRT Automated Bug Reporting Tool accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (restore and store) atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack blk-availability.service loaded active exited Availability of block devices bluetooth.service loaded active running Bluetooth service chronyd.service loaded active running NTP client/server
停止服務
首先,讓我們停止藍牙服務。
[root@localhost]# systemctl stop bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded inactive dead Bluetooth service [root@localhost]#
我們可以看到,藍牙服務現在處於非活動狀態。
要再次啟動藍牙服務。
[root@localhost]# systemctl start bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded active running Bluetooth service [root@localhost]#
注意 - 我們沒有指定bluetooth.service,因為.service是隱含的。最好將單元型別與我們正在處理的服務一起考慮。因此,從現在開始,我們將使用.service副檔名來明確我們正在進行服務單元操作。
可以在服務上執行的主要操作包括:
| 啟動 | 啟動服務 |
| 停止 | 停止服務 |
| 重新載入 | 重新載入服務的活動配置,而無需停止它(例如system v init中的kill -HUP) |
| 重啟 | 停止然後啟動服務 |
| 啟用 | 在啟動時啟動服務 |
| 停用 | 停止服務在執行時自動啟動 |
上述操作主要用於以下場景:
| 啟動 | 啟動已停止的服務。 |
| 停止 | 臨時關閉服務(例如,當必須停止服務才能訪問服務鎖定的檔案時,如升級服務時) |
| 重新載入 | 當已編輯配置檔案並且我們希望應用新更改而不停止服務時。 |
| 重啟 | 與重新載入相同的場景,但服務不支援重新載入。 |
| 啟用 | 當我們希望已停用的服務在啟動時執行時。 |
| 停用 | 主要用於需要停止服務但它在啟動時啟動的情況。 |
檢查服務狀態 -
[root@localhost]# systemctl status network.service network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled) Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago Docs: man:systemd-sysv-generator(8) Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS) localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking... localhost.localdomain network[923]: Bringing up loopback interface: [ OK ] localhost.localdomain systemd[1]: Started LSB: Bring up/down networking. [root@localhost]#
顯示網路服務的當前狀態。如果我們想檢視所有與網路相關的服務,我們可以使用 -
[root@localhost]# systemctl --all -t service | grep -i network network.service loaded active exited LSB: Bring up/ NetworkManager-wait-online.service loaded active exited Network Manager NetworkManager.service loaded active running Network Manager ntpd.service loaded inactive dead Network Time rhel-import-state.service loaded active exited Import network [root@localhost]#
對於熟悉sysinit服務管理方法的使用者,過渡到systemd非常重要。systemd是在Linux中啟動和停止守護程序服務的新方法。