systemd服务管理

在systemd中,之前服务的启动脚本将以Unit(单元)的形式存在,因此服务管理=单元管理。

显示所有已启用的Unit(list-units)

因为systemctl命令的默认选项是systemctl list-units,不添加任何选项的话,将显示list-units的结果。

另外在systemctl命令中加上--no-pager选项后将不翻页显示所有单元的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ systemctl list-units
UNIT                                             LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount                loaded active waiting   Arbitrary Executable File Formats File System Automount Point
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-pnp0-00:09-tty-ttyS0.device          loaded active plugged   /sys/devices/pnp0/00:09/tty/ttyS0
(--snip--)
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.
96 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

统一显示已安装的Unit文件(list-unit-files)

1
2
3
4
5
6
7
8
9
10
11
12
$ systemctl list-unit-files
UNIT FILE                              STATE
proc-sys-fs-binfmt_misc.automount      static
dev-hugepages.mount                    static
sys-kernel-debug.mount                 static
tmp.mount                              masked
var-lib-nfs-rpc_pipefs.mount           static
brandbot.path                          disabled
arp-ethers.service                     disabled
auditd.service                         enabled
(--snip--)
207 unit files listed.

比如执行了yum install httpd命令安装Apache后,会追加这样一个Unit文件。

1
2
$ systemctl list-unit-files | grep httpd
httpd.service                          disabled

启用Unit(enable)

启用Unit后,会如下所示系统在开机时就会启动服务。systemctl enable httpd命令与之前CentOS6中chkonfig httpd on的作用是一样的。

1
2
$ sudo systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

另外multi-user即相当于runlevel(init) 2 or 3 or 4。各运行状态如下所示。

  • runlevel0 -> poweroff 关机
  • runlevel1 -> rescue 单用户模式(救援模式)
  • runlevel2 -> multi-user 多用户模式(无网络、字符界面)
  • runlevel3 -> multi-user 多用户模式(有网络、字符界面)
  • runlevel4 -> multi-user 备用模式(现已基本废弃)
  • runlevel5 -> graphical 图形界面
  • runlevel6 -> reboot 重启系统

命令执行后,原本安装后默认禁用(disable)的服务将被启用。

1
2
$ systemctl list-unit-files --no-pager | grep httpd
httpd.service                          enabled

禁用Unit(disable)

禁用后,该服务(启动项)将被删除。systemctl disable httpdchkonfig httpd off作用等同。

1
2
$ sudo systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

使用list-unit-files命令确认是否被禁用。

1
2
$ systemctl list-unit-files --no-pager | grep httpd
httpd.service                          disabled

查看Unit是否启用/禁用(is-enable)

启用时显示enabled,禁用时显示disabled。

1
2
3
4
5
6
$ sudo systemctl is-enabled httpd
disabled
$ sudo systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
$ sudo systemctl is-enabled httpd
enabled

Unit的再启用(reenable)

使用再启动命令后,会先禁用Unit后再启用。

1
2
3
$ sudo systemctl reenable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

启动Unit(start)

service命令会显示启动过程,而systemctl则并不显示启动的详细过程。

1
2
3
4
$ sudo systemctl start httpd
$ ps aux | grep httpd
root      7977  0.3  0.4 213704  4880 ?        Ss   01:02   0:00 /usr/sbin/httpd -DFOREGROUND
apache    7978  0.0  0.2 213704  2872 ?        S    01:02   0:00 /usr/sbin/httpd -DFOREGROUND

Unit的状态确认(status)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since 金 2014-10-10 01:06:07 UTC; 8s ago
 Main PID: 7998 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─7998 /usr/sbin/httpd -DFOREGROUND
           ├─7999 /usr/sbin/httpd -DFOREGROUND
           ├─8000 /usr/sbin/httpd -DFOREGROUND
           ├─8001 /usr/sbin/httpd -DFOREGROUND
           ├─8002 /usr/sbin/httpd -DFOREGROUND
           └─8003 /usr/sbin/httpd -DFOREGROUND
10月 10 01:06:07 ip-172-31-7-131 systemd[1]: Starting The Apache HTTP Server...
10月 10 01:06:07 ip-172-31-7-131 systemd[1]: Started The Apache HTTP Server.

显示Unit的详细信息(show)

show选项会显示Unit的详细信息。虽然status选项更加直观,但在处理脚本的时候show选项使用起来更加得心应手。

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo systemctl show httpd
Id=httpd.service
Names=httpd.service
Requires=basic.target
Wants=system.slice
Conflicts=shutdown.target
Before=shutdown.target
After=network.target remote-fs.target nss-lookup.target systemd-journald.socket basic.target system.slice
Description=The Apache HTTP Server
LoadState=loaded
ActiveState=active
...

终止Unit(stop)

终止单元和其开启过程一样,并不显示详细信息。

1
$ sudo systemctl stop httpd

重新读取Unit的配置文件(reload)

是否可重新加载取决于Unit自身。

1
$ sudo systemctl reload httpd

重启Unit(restart)

startstop一样,通常无消息提示。

1
$ sudo systemctl restart httpd

尝试重启Unit(try-restart)

Unit处在启动状态时则重启。Unit未运行时则不进行任何操作。

1
$ sudo systemctl try-restart httpd

重新加载Unit设置或重启(reload-or-restart)

若Unit能重新加载配置则执行reload操作,若无法重新加载配置则执行restart操作。另外Unit若处在停止状态则启动。

1
$ sudo systemctl reload-or-restart httpd

重新载入Unit的配置或尝试重启(reload-or-try-restart)

虽然与reload-or-restart同样,但若Unit处在停止状态时则不启动。

1
2
3
4
5
$ sudo systemctl reload-or-try-restart httpd
$ sudo systemctl stop httpd
$ sudo systemctl reload-or-try-restart httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

强行终止Unit(kill)

1
$ sudo systemctl kill httpd

Unit的锁定(遮掩)(mask/unmask)

虽然禁用(disable)Unit后也能启动它,但使用mask命令后该服务则完全无法启动。

1
2
3
4
$ sudo systemctl mask httpd
ln -s '/dev/null' '/etc/systemd/system/httpd.service'
$ sudo systemctl start httpd
Failed to issue method call: Unit httpd.service is masked.

Unit被masked后,is-enabled会提示被锁定。

1
2
$ sudo systemctl is-enabled httpd
masked

解除mask需要使用unmask选项。

1
2
$ sudo systemctl unmask httpd
rm '/etc/systemd/system/httpd.service'

确认Unit的运行状态(is-active)

使用is-active选项,若Unit处在运行状态则反馈active。

1
2
3
$ sudo systemctl start httpd
$ sudo systemctl is-active httpd
active

若未处在运行状态则反馈unknown。

1
2
3
$ sudo systemctl stop httpd
$ sudo systemctl is-active httpd
unknown

查看Unit的异常状态(is-failed)

使用选项is-failed,若Unit正常运行则反馈active。

1
2
$ sudo systemctl is-failed httpd
active

若该Unit异常或未启动,则反馈failed。

1
2
3
4
5
$ sudo mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
$ sudo systemctl restart httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
$ sudo systemctl is-failed httpd
failed

重置Unit的异常状态(reset-failed)

systemd将重置处在异常状态中的Unit。

1
2
3
4
5
$ sudo systemctl is-failed httpd
failed
$ sudo systemctl reset-failed httpd
$ sudo systemctl is-failed httpd
unknown

查看Unit的依赖关系(list-dependencies)

将显示该Unit所依赖的所有Unit。

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo systemctl list-dependencies httpd
httpd.service
├─system.slice
└─basic.target
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
  ├─rhel-configure.service
  ├─rhel-dmesg.service
  ├─rhel-loadmodules.service
  ├─paths.target
  ├─slices.target

写在最后

从CentOS 6.x过来的用户可能完全习惯了init的管理方式,对于新systemd的管理方式可能难以适应或心生厌恶。但由于systemd的强大和不断普及,今后将很有可能成为发展主流,所以有必要深入学习并习惯这种新管理方式。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100908

(2)
无名无名
上一篇 2018-06-12
下一篇 2018-06-12

相关推荐

  • 正则表达式

    grep命令: 文本过滤(按行过滤) 参数   -v 取反 -i 忽略大小写 -n 显示行号 -c 统计匹配行数 -q 静默执行(不显示执行结果) -o 仅显示搜索到的字符串 -A #(数字) 包含关键字的后续几行 -B #(数字) 包含关键字的前面几行 -C #(数字) 包含关键字的前后几行 -w 匹配整个单词 -E 相当于fgrep 正则表达式 REGE…

    Linux笔记 2018-03-30
  • 学习笔记(2)

    学习笔记

    Linux笔记 2018-04-01
  • 第八周作业

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函数示例(至少3例)

    Linux笔记 2018-06-29
  • shell脚本之判断httpd是否有异常

    案例 以web为例 大全讲解:如http为例 #/etc/init.d/httpd start      开启httpd #lsof –i :80 [root@centos6 ~/bin]$curl -I -s -o /dev/null -w “%{http_code}\n” http://172.16.0.1 析:-I 是响应头,响…

    Linux笔记 2018-05-20
  • N30-bash特性以及Linux文件管理常用命令汇总

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理类命令:cat,tac,head,tail,more,less 分屏查看命令:more,less more:more FILE特点,翻盘至文件尾部后自动退出 less FILE head:查看文件的前n行head [options] FILE-n 数字-数字 tail:查看…

    Linux笔记 2018-05-26
  • Linux用户和组管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。 5、取出当前主机的…

    Linux笔记 2018-07-13