Linux常用命令-systemctl

命令

systemctl

描述

Control the systemd system and service manager
系统服务管理

用法

1
systemctl [OPTIONS...] COMMAND [NAME...]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Options:
--system 连接系统管理器
-t --type=TYPE 显示指定类型的单元unit
--state=STATE 显示指定状态的单元,可选参数LOAD,SUB,ACTIVE
-p --property=NAME 显示指定名称的属性
-a --all 显示所有加载的单元或属性
-l --full 不要省略单元名称
-r --recursive 递归显示
--reverse 在使用list-dependencies命令时,仅显示单元之间的反向依赖关系
--job-mode=MODE 在向任务队列中添加新任务(job)时,如何处理队列中已有的任务
--show-types 在使用list-sockets命令列出套接字(socket)时,同时显示套接字的类型
-i --ignore-inhibitors 当关闭或休眠系统时,忽略inhibitor锁
--kill-who=WHO 配合kill命令使用,指定向哪个进程发送信号
-s --signal=SIGNAL 指定发送什么信号
--now 启动或停止单元
-q --quiet 静默模式
--no-block 不必等待单元启动/停止完成
--no-wall 在执行halt/poweroff/reboot之前不发送警告信息
--no-reload 在完成操作之后不重新加载守护进程
--no-legend 不显示标题
--no-pager 不分页
--no-ask-password 不请求系统密码
--global 全局开启或关闭单元文件
--runtime 临时变更,重启后失效
-f --force 当启用单元文件时,覆盖现有的符号链接,当关闭时,立即执行操作
--preset-mode= Apply only enable, only disable, or all presets
--root=PATH 设置寻找单元文件的根目录
-n --lines=INTEGER 指定日志显示的行数
-o --output=STRING 更改journal日志显示格式(short, short-iso,
short-precise, short-monotonic, verbose,
export, json, json-pretty, json-sse, cat)
--plain 以列表显示

Unit Commands:
list-units [PATTERN...] 显示加载的单元
list-sockets [PATTERN...] 按地址顺序显示加载的socket
start NAME... 启动一个或多个单元
stop NAME... 停止
reload NAME... 重新加载
restart NAME... 启动或重启
try-restart NAME... 如果服务处于启动状态则重启,否则忽略操作
reload-or-restart NAME... 重新加载或重新启动
reload-or-try-restart NAME... 重新加载或重新启动
kill NAME... 发送信号给一个单元的进程
is-active PATTERN... 检查单元是否处于活动状态
is-failed PATTERN... 检查单元是否故障
status [PATTERN...|PID...] 显示运行状态
show [PATTERN...|JOB...] 显示单元属性
cat PATTERN... 显示单元配置

Unit File Commands:
list-unit-files [PATTERN...] 列出所有已安装的单元文件及其启用状态
enable NAME... 启用
disable NAME... 禁用
reenable NAME... 重新启用
preset NAME... 按预设文件重置指定单元状态
preset-all 按预设文件重置所有单元状态
is-enabled NAME... 检查单元是否启用
mask NAME... 屏蔽指定单元
unmask NAME... 解除屏蔽
link PATH... 创建软链接单元文件到标准单元目录中

Manager Lifecycle Commands:
daemon-reload 重新加载systemd配置文件

System Commands: 注意以下命令为高危命令
is-system-running 检查系统是否完全运行
default 进入默认模式
rescue 进入救援模式
emergency 进入紧急模式
halt 关闭系统,等同于直接执行halt命令
poweroff 关闭系统电源,等同于poweroff命令
reboot [ARG] 重启系统,等同于reboot命令
suspend 挂起系统
hibernate 休眠系统

注意

系统服务脚本路径/usr/lib/systemd/system*,用户服务脚本路径/usr/lib/systemd/user*
/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,service后缀的文件一般包括以下三部分内容[Unit],[Service]和[Install]
参考
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
$ systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File
sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loaded active plugg
sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda2.device loaded active plugg
sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda.device loaded active plugged
sys-devices-pci0000:00-0000:00:11.0-0000:02:00.0-net-eth0.device loaded active plugged 82545EM Gigabi
sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0
sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1
sys-fs-fuse-connections.mount loaded active mounted FUSE Control File System
sys-kernel-config.mount loaded active mounted Configuration File System
systemd-ask-password-plymouth.path loaded active waiting Forward Password Requests to Plymouth D
systemd-ask-password-wall.path loaded active waiting Forward Password Requests to Wall Direc
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
sysstat.service loaded active exited Resets System Activity Logs
systemd-journal-flush.service loaded active exited Flush Journal to Persistent Storage
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
dev-mapper-centos\x2dswap.swap loaded active active /dev/mapper/centos-swap
basic.target loaded active active Basic System
...
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.

100 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
# 显示系统服务状态
$ systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
auditd.service enabled
autovt@.service enabled
blk-availability.service disabled
brandbot.service static
...
# 显示系统开启启动的服务
$ systemctl list-unit-files |grep enabled
auditd.service enabled
autovt@.service enabled
chronyd.service enabled
crond.service enabled
...
# 查看指定服务
$ systemctl list-units chronyd.service
UNIT LOAD ACTIVE SUB DESCRIPTION
chronyd.service loaded active running NTP client/server
# 查看系统中所有service类型
$ systemctl list-units --type service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chrony-wait.service loaded active exited Wait for chrony to synchronize system clock
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
getty@tty1.service loaded active running Getty on tty1
...
# 显示系统socket
$ systemctl list-sockets
LISTEN UNIT ACTIVATES
/dev/log systemd-journald.socket systemd-journald.service
/run/dbus/system_bus_socket dbus.socket dbus.service
/run/dmeventd-client dm-event.socket dm-event.service
/run/dmeventd-server dm-event.socket dm-event.service
/run/lvm/lvmetad.socket lvm2-lvmetad.socket lvm2-lvmetad.service

# 查看chronyd服务状态
$ systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-03-16 13:03:46 CST; 5h 12min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 670 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 651 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 668 (chronyd)
CGroup: /system.slice/chronyd.service
└─668 /usr/sbin/chronyd
Mar 16 15:57:19 centos7 chronyd[668]: Selected source 203.107.6.88
Mar 16 16:03:01 centos7 chronyd[668]: Source 203.107.6.88 offline
Mar 16 16:03:01 centos7 chronyd[668]: Cannot synchronise: no selectable sources
Mar 16 16:03:02 centos7 chronyd[668]: Source 203.107.6.88 online
Mar 16 16:03:02 centos7 chronyd[668]: Selected source 203.107.6.88
# 查看service文件
$ systemctl cat chronyd
# /usr/lib/systemd/system/chronyd.service
[Unit]
Description=NTP client/server
Documentation=man:chronyd(8) man:chrony.conf(5)
After=ntpdate.service sntp.service ntpd.service
Conflicts=ntpd.service systemd-timesyncd.service
ConditionCapability=CAP_SYS_TIME

[Service]
Type=forking
PIDFile=/var/run/chrony/chronyd.pid
EnvironmentFile=-/etc/sysconfig/chronyd
ExecStart=/usr/sbin/chronyd $OPTIONS
ExecStartPost=/usr/libexec/chrony-helper update-daemon
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full

[Install]
WantedBy=multi-user.target
# 查看属性
$ systemctl show chronyd
Type=forking
Restart=no
PIDFile=/var/run/chrony/chronyd.pid
NotifyAccess=none
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
WatchdogUSec=0
WatchdogTimestamp=Tue 2021-03-16 13:03:46 CST
WatchdogTimestampMonotonic=3724022
StartLimitInterval=10000000
StartLimitBurst=5
StartLimitAction=none
FailureAction=none

# 重载系统服务
systemctl daemon-reload
# 设置服务开机启动
systemctl enable *.service
# 关闭服务开机启动
systemctl disable *.service
# 启动服务
systemctl start *.service
# 停止服务
systemctl stop *.service
# 重新加载服务
systemctl reload *.service
# 重启服务
systemctl restart *.service

# 可以看到halt,poweroff,reboot命令是systemctl命令的软链接
$ ll /usr/sbin/{halt,poweroff,reboot}
lrwxrwxrwx. 1 root root 16 Jan 7 22:48 /usr/sbin/halt -> ../bin/systemctl
lrwxrwxrwx. 1 root root 16 Jan 7 22:48 /usr/sbin/poweroff -> ../bin/systemctl
lrwxrwxrwx. 1 root root 16 Jan 7 22:48 /usr/sbin/reboot -> ../bin/systemctl
$ ll /usr/bin/systemctl
-rwxr-xr-x. 1 root root 721744 Nov 17 00:47 /usr/bin/systemctl
# 关机
$ poweroff
$ systemctl poweroff

# 服务正常启动状态
$ systemctl start chronyd
$ systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
# 屏蔽服务,即无法使用systemd管理
$ systemctl stop chronyd
$ systemctl mask chronyd
Created symlink from /etc/systemd/system/chronyd.service to /dev/null.
$ systemctl start chronyd
Failed to start chronyd.service: Unit is masked.
$ systemctl status chronyd
● chronyd.service
Loaded: masked (/dev/null; bad)
# 解除屏蔽
$ systemctl unmask chronyd
Removed symlink /etc/systemd/system/chronyd.service.
$ systemctl start chronyd