systemd 常见问题
确认服务是否正在运行
~# systemctl is-active --quiet rpcbind
去掉 --quiet
参数可以输出运行状态值。
journalctl
显示内核日志:
~# journalctl -k
~# journalctl -t kernel
显示当前启动的日志:
~# journalctl -b
如果启动了保存每次启动的日志,还可以列出启动列表:
~# journalctl --list-boots
按照时间范围显示日志:
~# journalctl --since yesterday --until "1 hour ago"
指定 --no-pager
参数可以完整显示日志,而不是分页显示:
~# journalctl --since "2 hour ago" --no-pager
显示最后 20 条日志:
~# journalctl -n 20
跟踪最新日志:
~# journalctl -f
显示设备单元
~# systemctl --all --full -t device
显示服务配置文件路径
~# systemctl show -p FragmentPath vlsraid.service
FragmentPath=/etc/systemd/system/vlsraid.service
需要注意的是如果服务配置文件是符号链接,命令返回的 FragmentPath 对于不同的 systemd 版本,可能直接返回符号链接路径,也可能返回指向的目标路径。
systemd-networkd
使用 networkctl
或 networkctl list
命令显示网卡列表:
~# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
12 eth0 ether routable configured
增加一个 DHCP 的网络配置:
~# cat > /etc/systemd/network/20-wired.network
[Match]
Name=eth0
[Network]
DHCP=yes
[DHCPv4]
UseDNS=no
或者静态地址的网络配置:
~# cat > /etc/systemd/network/20-wired.network
[Match]
Name=eth0
[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
配置完成之后就可以使用 networkctl reload
命令刷新。
systemd-resolved DNS 服务器
修改 /etc/systemd/resolved.conf
配置 DNS 服务器地址:
~# cat /etc/systemd/resolved.conf
[Resolve]
DNS=114.114.114.114
启动 systemd-resolved
DNS 服务器:
~# systemctl start systemd-resolved
~# systemctl enable systemd-resolved
可以使用 resolvectl
或 systemd-resolve --status
命令确认 DNS 服务器状态。
如果不存在 /etc/resolv.conf
文件,也可以创建链接:
~# ln -sfn /usr/lib/systemd/resolv.conf /etc/resolv.conf
resolvectl
查询 DNS:
~# resolvectl query www.baidu.com
显示全局和网卡独立的 DNS 服务器地址:
~# resolvectl dns
Global: 223.5.5.5
Link 1 (eth1):
Link 2 (eth0): 192.168.1.1
查询具体网卡的 DNS 服务器状态:
~# resolvectl status enaphyt4i0
Link 5 (enaphyt4i0)
Current Scopes: LLMNR/IPv4 LLMNR/IPv6
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
关机处理
关机脚本
systemd 在关机/重启等操作时会运行 /usr/lib/systemd/system-shutdown/
目录下的所有可执行文件,命令参数为实际执行的操作:
poweroff
halt
reboot
kexec
关机服务
增加 systemd 服务,可以先为 [Unit]
指定 Before=shutdown.target
,然后为 [Install]
指定 WantedBy=poweroff.target
就可以在关机前运行服务;
改为 WantedBy=reboot.target
可以在重启前运行服务。
运行时启用的服务
某些服务可能被禁用后也会在运行时启用:
~# systemctl is-enabled serial-getty@ttyAMA0.service
enabled-runtime
可以在 Generators 中查找依赖:
~# ls -l /run/systemd/generator/getty.target.wants/serial-getty@ttyAMA0.service
lrwxrwxrwx 1 root root 41 4月 2 01:37 /run/systemd/generator/getty.target.wants/serial-getty@ttyAMA0.service -> /lib/systemd/system/serial-getty@.service
如果需要强制禁用,可以:
~# systemctl mask serial-getty@ttyAMA0.service
Created symlink /etc/systemd/system/serial-getty@ttyAMA0.service → /dev/null.
此时的 is-enabled
状态:
~# systemctl is-enabled serial-getty@ttyAMA0.service
masked
也可以恢复:
~# systemctl unmask serial-getty@ttyAMA0.service
Removed /etc/systemd/system/serial-getty@ttyAMA0.service.