Linux服务管理(一) 管理网络服务
1 | 作者:李晓辉 |
章节目标
讨论本课程的目标,并了解如何管理服务。
了解如何使用 NetworkManager 和相关工具配置和管理网络接口。
使用 Ansible 自动配置服务和网络接口。
控制网络服务
Systemctl 和 Systemd 单元
红帽企业 Linux 系统的进程 ID 1 是systemd
。此进程负责在启动过程中激活系统上的其他守护进程,并在系统停止或重新启动时将其关闭。Systemd
服务通常管理一个或多个共同提供某一功能的守护进程
systemctl
命令用于管理各种类型的 systemd
对象,它们称为单元。可以通过 systemctl -t help
命令显示可用单元类型的列表。
一些常见的单元类型包括:
服务单元,具有
service
扩展名,代表系统服务。这种单元用于管理经常访问的守护进程,如 web 服务器。当服务单元启动守护进程时,它通常会一直运行直到被systemd
停止为止。套接字单元,具有
socket
扩展名,代表进程间通信 (IPC) 套接字。套接字的控制可以在建立客户端连接时从systemd
传递给新启动的守护进程。套接字单元用于延迟系统启动时的服务启动,或者按需启动不常使用的服务。当客户端断开连接时,套接字单元可能会停止关联的服务单元。
服务状态
可以通过 systemctl status name.type
来查看服务的状态
1 | [root@servera ~]# systemctl status sshd.service |
状态输出中可以找到表示服务状态的几个关键字:
关键字 | 描述 |
---|---|
loaded | 单元配置文件已处理。 |
active (running) | 正在通过一个或多个持续进程运行。 |
active (exited) | 已成功完成一次性配置。 |
active (waiting) | 运行中,但正在等待事件。 |
inactive | 不在运行。 |
enabled | 将在系统启动时启动。 |
disabled | 不会在系统启动时启动。 |
static | 无法启用,但可以由某一启用的单元自动启动。 |
列出单元文件
查询所有单元的状态,以验证系统启动。
1
[root@servera ~]# systemctl
仅查询服务单元的状态。
1
2
3
4
5
6
7
8[root@servera ~]# systemctl --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
atd.service loaded active running Deferred execution scheduler
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
chronyd.service loaded active running NTP client/server
colord.service loaded active running Manage, Install and Generate Color Profiles调查处于失败或维护状态的任何单元。可选择添加
-l
选项以显示完整的输出。1
2
3
4
5
6
7
8[root@servera ~]# systemctl status NetworkManager-wait-online -l
● NetworkManager-wait-online.service - Network Manager Wait Online
Loaded: loaded (/usr/lib/systemd/system/NetworkManager-wait-online.service; enabled; preset: disabled)
Active: active (exited) since Sun 2024-08-11 06:10:34 CST; 5min ago
Docs: man:NetworkManager-wait-online.service(8)
Process: 1344 ExecStart=/usr/bin/nm-online -s -q (code=exited, status=0/SUCCESS)
Main PID: 1344 (code=exited, status=0/SUCCESS)
CPU: 30ms也可使用
is-active
或is-enabled
参数来判断特定的单元是否活动,以及显示该单元是否已启用在系统启动时启动。其他备用命令也可显示活动和已启用状态:1
2
3
4[root@servera ~]# systemctl is-active sshd
active
[root@servera ~]# systemctl is-enabled sshd
enabled列出所有已加载单元的活动状态。也可选择限制单元类型。
--all
选项可加入不活动的单元。1
2
3
4
5
6
7
8
9
10[root@servera ~]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
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
...output omitted...
[root@servera ~]# systemctl list-units --type=service --all
...output omitted...查看所有单元的已启用和已禁用设置。也可选择限制单元类型。
1
2[root@servera ~]# systemctl list-unit-files --type=service
...output omitted... ```仅查看失败的服务。
1
2[root@servera ~]# systemctl --failed --type=service
...output omitted... ```停止服务并验证其状态。
1
2[root@servera ~]# systemctl stop sshd.service
[root@servera ~]# systemctl status sshd.service启动服务并查看其状态。进程 ID 已经改变。
1
2[root@servera ~]# systemctl start sshd.service
[root@servera ~]# systemctl status sshd.service以单一命令停止服务,然后再启动该服务。
1
2[root@servera ~]# systemctl restart sshd.service
[root@servera ~]# systemctl status sshd.service发出指示使服务读取和重新加载其配置文件,而不完全停止和启动服务。请注意,由于没有完全停止和启动,进程 ID 未发生更改。
1
[root@servera ~]# systemctl reload sshd.service
屏蔽服务
1
2[root@servera ~]# systemctl mask iptables
[root@servera ~]# systemctl unmask iptables启用或禁用服务并验证其状态
1
[root@servera ~]# systemctl disable sshd.service --now
Systemctl 命令摘要
下面显示了一些常用的命令。若要获取更多命令,请运行 systemctl --help
。
命令 | 任务 |
---|---|
systemctl status *`UNIT`* | 查看有关单元状态的详细信息。 |
systemctl stop *`UNIT`* | 在运行中的系统上停止一项服务。 |
systemctl start *`UNIT`* | 在运行中的系统上启动一项服务。 |
systemctl restart *`UNIT`* | 在运行中的系统上重新启动一项服务。 |
systemctl reload *`UNIT`* | 重新加载运行中服务的配置文件。 |
systemctl mask *`UNIT`* | 彻底禁用服务,使其无法手动启动或在系统引导时启动。 |
systemctl unmask *`UNIT`* | 取消屏蔽服务并使其可用。 |
systemctl enable *`UNIT`* | 将服务配置为在系统引导时启动。 |
systemctl disable *`UNIT`* | 禁止服务在系统引导时启动。 |
systemctl list-dependencies *`UNIT`* | 列出指定单元需要的单元。 |
配置网络接口
NetworkManager 简介
在 NetworkManager 中:
设备是网络接口。
连接是可以为设备配置的设置的集合。
对于任何一个设备,在同一时间只能有一个连接处于活动状态。可能存在多个连接,以供不同设备使用或者以便为同一设备更改配置。
每个连接具有一个用于标识自身的名称或 ID。
/etc/sysconfig/network-scripts/ifcfg-*`name`*
文件存储连接的持久配置,其中name
是连接的名称。当连接名称的名称中包含空格时,文件名中的空格将被替换为下划线。如果需要,可以手动编辑此文件。nmcli
实用程序可用于通过 shell 提示符来创建和编辑连接文件。
nmcli dev status
命令可显示所有网络设备的当前状态:
1 | [root@servera ~]# nmcli dev status |
nmcli con show
命令可显示所有连接的列表。要仅列出活动的连接,可添加 --active
选项。
1 | [root@servera ~]# nmcli con show |
使用 ip addr show
命令显示系统上网络接口的当前配置。要仅列出单个接口,请添加接口名称作为最后一个参数:
1 | [root@servera ~]# ip addr show eth0 |
添加网络连接
此示例为接口 eno1 添加一个名为 eno1 的新连接,从DHCP获得地址
1 | [root@servera ~]# nmcli con add con-name eno1 type ethernet ifname eno1 |
此示例为接口 eno1 添加一个名为 static-eno1 的新连接。此连接:
设置 192.0.2.7/24 的静态 ipv4 地址和 192.0.2.1 的 IPv4 网关
设置一个静态 IPv6 地址 2001:db8:0:1::c000:207/64 和一个 IPv6 网关路由器 2001:db8:0:1::1
1
2
3
4[root@servera ~]# nmcli con add con-name static-eno1 type ethernet ifname eno1 \
ipv6.address 2001:db8:0:1::c000:207/64 ipv6.gateway 2001:db8:0:1::1 \
ipv4.address 192.0.2.7/24 ipv4.gateway 192.0.2.1
Connection 'static-eno1' (63f9a2ef-9e76-4eae-9372-5b7c4c6143cf) successfully added.nmcli con up/down name 命令激活连接
1
[root@servera ~]# nmcli con up static-eno1
nmcli dev disconnect device
命令将断开与 device
网络接口的连接并将其关闭
1 | [root@servera ~]# nmcli dev dis eno1 |
修改网络连接设置
nmcli con mod name
命令可用于更改连接的设置
1 | [root@servera ~]# nmcli con mod static-ens3 ipv4.address 192.0.2.2/24 \ |
要针对 static-ens3
连接将 IPv6 地址设置为 2001:db8:0:1::a00:1/64
并将默认网关设置为 2001:db8:0:1::1
:
1 | [root@servera ~]# nmcli con mod static-ens3 ipv6.address 2001:db8:0:1::a00:1/64 \ |
nmcli 命令摘要
下表是本节中讨论的关键命令的列表。
命令 | 用途 |
---|---|
nmcli dev status | 显示所有网络接口的 NetworkManager 状态。 |
nmcli con show | 列出所有 NetworkManager 连接。 |
nmcli con show *`name`* | 列出 name 连接的当前设置。 |
nmcli con add con-name *`name`* [OPTIONS] | 添加一个名为 name 的新连接。 |
nmcli con mod *`name`* [OPTIONS] | 修改 name 连接。 |
nmcli con reload | 让 NetworkManager 重新读取配置文件。这在手动编辑配置文件后很有用。 |
nmcli con up *`name`* | 激活 name 连接。 |
nmcli dev dis *`dev`* | 在 dev 网络接口上停用并断开当前连接。 |
nmcli con del *`name`* | 删除 name 连接及其配置文件。 |
ip addr show | 显示当前网络接口地址配置。 |
自动化执行服务和网络接口配置
Ansible 提供了在使用 systemd
服务时特别有用的三个模块:service
、systemd
和 service_facts
。
可以使用 service
模块。service
模块提供了一组基本选项:start
、stop
、restart
和 enable
。需要的话可以运行 ansible-doc service
命令
1 | - name: web server is started |
1 | - name: reload web server |
service_facts
模块收集有关系统上服务的信息,并将该信息存储在 ansible_facts ['services']
变量中。
1 | - name: collect service status facts |
使用网络系统角色配置网络
仓库中包括一个名为 rhel-system-roles 的软件包,其中包含用于 Linux 服务管理的 Ansible 角色集合。安装该软件包时,它会将角色放置在 /usr/share/ansible/roles
目录中
rhel-system-roles.network
角色(也可以作为 linux-system-roles.network
来调用)是在受管主机上配置网络设置的最简单方法。
您可以在特定主机的 host_vars
主机变量文件中包含以下内容,然后创建yaml来运行
1 |
|
下表列出了 network_connections
变量的选项。
选项名称 | 描述 |
---|---|
name | 标识连接配置集。 |
state | 连接配置集的运行时状态:如果连接配置集应处于活动状态,为 up ,如果应处于非活动状态,则为 down 。 |
persistent_state | present 设置为默认值,将创建或修改连接配置集。您还必须指定 type 选项。如果您不将 state 选项设置为 up ,则新连接或修改后的连接将不会启动。absent 设置将删除连接配置集。 |
type | 标识连接类型。有效的值有 ethernet 、bridge 、bond 、team 、vlan 、macvlan 和 infiniband 。 |
autoconnect | 确定连接是否自动启动。 |
mac | 将连接限制为在具有特定 MAC 地址的设备上使用。 |
interface_name | 将连接配置集显示为供特定接口使用。 |
zone | 为接口配置 firewalld 区域。 |
ip | 确定连接的 IP 配置。支持诸如 address (指定静态 IP 地址)或 dns (配置 DNS 服务器)等选项。 |
创建好变量文件后,可以创建以下的yaml,会自动从host_vars中调用变量
1 | - name: Ensure NICs have the right configuration |
网络配置的 Ansible 事实
当 play 执行自动事实收集或运行 setup
模块时,Ansible 将收集与网络配置相关的事实。如果您需要有关计算机的网络接口、IP 地址或当前配置的信息以在 play 中使用,则其中的许多事实都特别有用。
事实名称 | 描述 |
---|---|
ansible_facts['all_ipv4_addresses'] | 包含受管主机上配置的 IPv4 地址列表,省略 127.0.0.1 。 |
ansible_facts['all_ipv6_addresses'] | 包含受管主机上配置的 IPv6 地址的列表,省略 ::1 ,但在 fe80::/10 中包括本地链路地址。 |
ansible_facts['default_ipv4'] | 包含有关在受管主机上配置有默认 IPv4 路由的接口的事实字典,包括其名称、MAC 地址和网络设置。如果没有默认路由,则为空。 |
ansible_facts['default_ipv6'] | 包含有关在受管主机上配置有默认 IPv6 路由的接口的事实字典,包括其名称、MAC 地址和网络设置。如果没有默认路由,则为空。 |
ansible_facts['interfaces'] | 包含受管主机上所有网络接口的列表。 |
ansible_facts['*`interface-name`*'] | 包含关于 interface-name 网络接口的事实字典,包括其当前的网络配置和功能。 |
列出接口上的 IP 地址
1 | - name: display IPv4 address of enp11s0 |