# 第一章:CentOS的系統服務管理系統
## Linux系統服務管理
從CentOS7開始,CentOS的服務管理工具由SysV改為了systemd,但即使是在CentOS7里,也依然可以使用`chkconfig`這個原本出現在SysV里的命令。
Systemd的設計目標是,為系統的啟動和管理提供一套完整的解決方案。
### chkconfig服務管理工具
#### 羅列chkconfig所管理的服務
使用`chkconfig --list`命令可以列出所有的服務及其在每個級別(run level)下的自啟狀態。
```
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
```
這里我們只關心第3級和第5級:第3級表示完整的多用戶模式,是標準的運行級,也即我們平常最常用的文字模式;第5級表示圖形界面的管理模式。
需要注意的是,在CentOS7中,`chkconfig`只保留極少量的SysV服務,其它服務請使用systemd進行管理。
#### 使用chkconfig更改某服務在某級別下的自啟狀態
例如,使用`chkconfig --level 345 network off`即可關閉network這個服務在第3/4/5級中的自啟;另外如果不傳入參數`--level`,則默認針對級別2/3/4/5操作。
#### 為chkconfig添加/刪除管理的服務項
簡單例如:
```
# chkconfig --del network
# chkconfig --add network
```
### systemd服務管理工具
#### 羅列systemd所管理的服務
使用`systemctl list-units --all --type=service`:
```
# systemctl list-units --all --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
aegis.service loaded active running LSB: aegis update.
agentwatch.service loaded active exited SYSV: Starts and stops guest agent
aliyun-util.service loaded active exited Initial Aliyun Jobs
aliyun.service loaded active running Aliyun Service Daemon
```
這些服務對應的啟動腳本文件保存在`/usr/lib/systemd/system`。
#### systemd的基本概念
systemd把系統的各項資源(包括各個服務、設備等)都看作是**unit**,unit有許多種類,我們目前關心的是**service**和**target**。這里的service并不是什么新概念,因此只解釋一下target:target是多個unit的組合,啟動一個target也就相當于啟動其中包含的所有unit;SysV中的run level在systemd里被target所取代,例如系統以多用戶文字模式(runlevel 3)啟動時,就會啟動**multi-user.target**,而以圖形界面模式(runlevel 5)啟動時,則會啟動**graphical.target**;target之間并非互斥的,因此可以同時啟動多個target。
我們可以用`systemctl list-dependencies multi-user.target`來列舉multi-user.target所包含的內容:
```
# systemctl list-dependencies multi-user.target
multi-user.target
● ├─aegis.service
● ├─agentwatch.service
● ├─aliyun-util.service
● ├─aliyun.service
● ├─brandbot.path
● ├─crond.service
● ├─dbus.service
● ├─network.service
● ├─ntpd.service
● ├─plymouth-quit-wait.service
● ├─plymouth-quit.service
● ├─rc-local.service
● ├─rsyslog.service
● ├─sshd.service
● ├─sysstat.service
● ├─systemd-ask-password-wall.path
● ├─systemd-logind.service
● ├─systemd-readahead-collect.service
● ├─systemd-readahead-replay.service
● ├─systemd-update-utmp-runlevel.service
● ├─systemd-user-sessions.service
● ├─basic.target
● │ ├─microcode.service
● │ ├─rhel-autorelabel-mark.service
● │ ├─rhel-autorelabel.service
● │ ├─rhel-configure.service
● │ ├─rhel-dmesg.service
● │ ├─rhel-loadmodules.service
● │ ├─paths.target
● │ ├─slices.target
● │ │ ├─-.slice
● │ │ └─system.slice
● │ ├─sockets.target
● │ │ ├─dbus.socket
● │ │ ├─systemd-initctl.socket
● │ │ ├─systemd-journald.socket
● │ │ ├─systemd-shutdownd.socket
● │ │ ├─systemd-udevd-control.socket
● │ │ └─systemd-udevd-kernel.socket
● │ ├─sysinit.target
● │ │ ├─dev-hugepages.mount
● │ │ ├─dev-mqueue.mount
● │ │ ├─kmod-static-nodes.service
● │ │ ├─ldconfig.service
● │ │ ├─plymouth-read-write.service
● │ │ ├─plymouth-start.service
```
可以看出這其中就包含了不少target,比如**basic.target**,因此target是可以嵌套的。
#### systemd常用命令
```
# systemctl enable crond.service // 讓某個服務開機自啟(.service可以省略)
# systemctl disable crond // 不讓開機自啟
# systemctl status crond // 查看服務狀態
# systemctl start crond // 啟動某個服務
# systemctl stop crond // 停止某個服務
# systemctl restart crond //重啟某個服務
# systemctl reload * # 重新加載服務配置文件
# systemctl is-enabled crond // 查詢服務是否開機啟動
```
## systemd功能介紹
Systemd 是 Linux 的系統工具,用來啟動守護進程,已成為大多數發行版的標準配置。
它的設計目標是,為系統的啟動和管理提供一套完整的解決方案。
根據 Linux 慣例,字母d是守護進程(daemon)的縮寫。 Systemd 這個名字的含義,就是它要守護整個系統。
從CentOS7開始,CentOS的服務管理工具由SysV改為了systemd,但即使是在CentOS7里,也依然可以使用`chkconfig`這個原本出現在SysV里的命令。