- Linux 管理教程
- 家
- CentOS概述
- CentOS Linux 基本命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd 服务启动和停止
- 使用 systemctl 进行资源管理
- 使用 crgroups 进行资源管理
- 流程管理
- 防火墙设置
- 在 CentOS Linux 中配置 PHP
- 在 CentOS Linux 上设置 Python
- 在 CentOS Linux 上配置 Ruby
- 为 CentOS Linux 设置 Perl
- 安装和配置开放 LDAP
- 创建 SSL 证书
- 安装 Apache Web 服务器 CentOS 7
- CentOS 7 上的 MySQL 设置
- 设置 Postfix MTA 和 IMAP/POP3
- 安装匿名 FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份与恢复
- 系统升级
- 外壳脚本
- 包管理
- 卷管理
- Linux 管理有用资源
- Linux 管理员 - 快速指南
- Linux 管理员 - 有用的资源
- Linux 管理员 - 讨论
Systemd 服务启动和停止
systemd是在 Linux 上运行服务的新方式。systemd有一个被取代的sysvinit。systemd为 Linux 带来了更快的启动时间,并且现在已成为管理 Linux 服务的标准方法。虽然systemd很稳定,但仍在不断发展。
systemd作为 init 系统,用于管理 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-analyzeblame命令。
[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 作为单位目标。建议对其他类型进行进一步研究。因为只有.service单元适用于启动和停止systemd服务。
每个单位都在位于以下任一位置的文件中定义:
/lib/systemd/system - 基本单元文件
/etc/systemd/system - 在运行时启动的修改单元文件
使用 systemctl 管理服务
要使用systemd,我们需要非常熟悉systemctl命令。以下是systemctl最常见的命令行开关。
转变 | 行动 |
---|---|
-t | 单位类型的逗号分隔值,例如服务或套接字 |
-A | 显示所有已加载的单位 |
- 状态 | 显示处于定义状态的所有单元:负载、子、活动、非活动等。 |
-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) |
重新开始 | 停止,然后启动服务 |
使能够 | 在启动时启动服务 |
禁用 | 阻止服务在运行时自动启动 |
上述操作主要用于以下场景 -
开始 | 启动已处于停止状态的服务。 |
停止 | 暂时关闭服务(例如,必须停止服务才能访问该服务锁定的文件,如升级服务时) |
重新加载 | 当配置文件被编辑并且我们想要应用新的更改而不停止服务时。 |
重新开始 | 与 reload 场景相同,但服务不支持reload。 |
使能够 | 当我们希望禁用的服务在启动时运行时。 |
禁用 | 主要在需要停止服务但在启动时启动的情况下使用。 |
检查服务的状态 -
[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 中启动和停止守护进程服务的新方法。