systemd 的作用是管理系统服务,配置文件大部分放置于 /lib/systemd/system 内。但是 Red Hat 官方文件指出, 该目录的文件主要是原本软件所提供的设置,不建议修改。
修改后的配置文件应在 /etc/systemd/system 内。
举例,vsftpd.service 这个服务:
<service_name>.service.d
格式,再在该目录下创建配置文件。这个目录下的配置文件会 累加其他设置 进入 /lib/systemd/system/vsftpd.service 内。尽管直接改 /lib/systemd/system 文件也有效,但 软件升级时,系统会用新软件包内的新配置文件覆盖旧的配置文件 。
比如 nginx.service 文件中有这么一段配置:
[Service]
...
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
...
可以看到,这个命令以 - 横线开头。
这意味着 systemd 会记录那些标志着命令执行失败的程序的退出代码 (即进程返回值非 0 或由于信号导致的退出),但不会产生进一步的影响。同时,忽略这些标志着命令执行失败的程序的返回值,将命令按照执行成功处理。
在 /etc/systemd/system/<name>.mount
配置硬盘自动挂载。
这里给一个例子 /etc/systemd/system/mnt-hgst8t2nd.mount:
[Install]
WantedBy=multi-user.target
[Mount]
Options=defaults
Type=ext4
What=/dev/disk/by-uuid/cd2949ed-9e14-4a34-a703-6dcbd761e9d3
Where=/mnt/hgst8t2nd
[Unit]
Description=Mount 2nd HGST 8T disk under /mnt/hgst8t2nd.
systemctl enable --now mnt-hgst8t2nd.mount
可以让硬盘开机自动挂载。
注意:
比如,例子中 Where 字段为 Where=/mnt/hgst8t2nd 则对应的文件名必须是 mnt-hgst8t2nd.mount 。
systemd-neworkd 在管理多张网卡时,可以使用正则表达式匹配网卡,比如 eth* 匹配 eth0/eth1/... 等等网卡。在 /etc/systemd/network/00-dhcp.network 配置如下:
[Match]
Name=eth*
[Network]
DHCP=ipv4
[DHCP]
ClientIdentifier=duid
相比 networking 服务默认将网卡的 MAC 地址作为 DHCP 的 Client ID ,systemd-networkd 可以有更多的选择:
在对使用 systemd-networkd 的 KVM 虚拟机进行复制时,如果不对 systemd-networkd 进行配置,即使生成了新的 MAC 地址,路由器可能依旧会给虚拟机分配上次得到的 IP 地址。
这是因为 systemd-networkd 默认使用 duid 作为 DHCP 客户端标识,而 duid 依赖 /etc/machine-id。
所有虚拟机的都是基于同一个原始 qcow2 镜像,而在复制过程中并没有改变 /etc/machine-id 的内容,相当于所有新的虚拟机使用了同一个 /etc/machine-id。最终 DHCP 服务器收到的所有请求来源于同一个 duid,因此分配同样的IP给客户端。
最终的配置要把
[DHCP]
ClientIdentifier=duid
改为:
[DHCP]
ClientIdentifier=mac
systemd-resolved 服务在本地的 53 端口建立了一个 DNS stub resolver 服务器。
DNS stub resolver 只把查询转发到上游 DNS,自己不做解析,通常用于在本地主机或网络上引入 DNS 缓存。
在 /etc/systemd/resolvd.conf 设定 DNSStubListener=no 以后可以关闭 DNS stub resolver,这个操作可以解放本机的 53 端口。
systemd-resolved 有四种不同的模式来处理域名解析:
使用哪个模式完全取决于 /etc/resolv.conf 是否为软连接,以及该软连接指向的目标。不需要特别的配置。
执行 timedatectl
可以看到系统目前的时间设定:
Local time: Sat 2020-04-18 04:54:50 CST
Universal time: Fri 2020-04-17 20:54:50 UTC
RTC time: Fri 2020-04-17 12:54:52
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
timedatectl list-timezones
列出所有的时区,并且找到需要的那个:
…
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
…
最后 timedatectl set-timezone Asia/Shanghai
设定时区,设定完成后会自动对时。
主机名分 3 类: static (静态主机名), pretty (好看、易读的主机名) 和 transient (临时的)。和主机名有关的文件为 /etc/hostname,它是在系统初始化的时候被读取的,并且内核根据它的内容设置 transient 主机名。
/etc/hostname 文件中的 static 主机名即时、永久生效。修改后执行 hostname
或者 uname -n
可以直接获取到,重启后也按照此文件的主机名进行初始化。
/etc/hostname 文件中没有存储主机名时,系统启动过程中内核会将 transient 主机名初始化为 localhost.localdomain 。
RedHat 系系统的 /etc/sysconfig/network 文件中设置的主机名不再生效。
hostname
命令修改的是 transient 主机名,即临时生效的主机名nmtui
命令可以以命令行图形化界的方式面修改主机名。命令直接修改 /etc/hostname 文件hostnamectl
命令。它可以修改并查看三种主机名。当它修改 static 主机名时,直接将结果写入 /etc/hostname 文件查看主机名:
hostnamectl
# 或
hostnamectl status
# 或
hostnamectl [--pretty | --static | --transient] status
设置主机名:
hostnamectl [--pretty | --static | --transient] set-hostname <name>
在修改了 pretty 主机名时,将取 pretty 名的简化部分作为 static 和 transient 主机名。
给设置主机名的命令传递一个空的字符串 hostnamectl set-hostname ""
可以将主机名重设为默认值。