- 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中启动和停止守护进程服务的新方法。