我有一个 systemd 服务,它具有:
[Unit]
After=network-online.target krb5-kdc.service krb5-admin-server.service
Wants=krb5-kdc.service network-online.target krb5-admin-server.service
除非网络堆栈完全准备好/完全可用,并且 Kerberos 服务已启动,否则该服务不应启动。(这就是我想要实现的,当这两个都不正确时,我的服务不应该尝试启动)。
我的单元文件似乎可以正常使用。
重新启动时,从 grub2 菜单中,如果我选择“* Ubuntu 的高级选项”,然后为我的内核选择“恢复模式”,然后打开 root shell,并且不运行“启用网络”,我可以看到我的服务尝试启动(随后失败,因为它需要完全运行的网络以及 kerberos 服务)。
除非网络堆栈完全可用并且 kerberos 服务已启动,否则我必须更改哪些内容才能启动服务?
在恢复模式 root shell 中(没有“启用网络”):
systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Encrypted Volumes
friendly-recovery.target loaded active active Friendly Recovery Mode
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
network-online.target loaded active active Network is Online
network-pre.target loaded active active Network (Pre)
network.target loaded active active Network
paths.target loaded active active Paths
slices.target loaded active active Slices
sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
time-sync.target loaded active active System Time Synchronized
timers.target loaded active active Timers
在上面的列表中,我没有看到任何 kerberos 服务,也不知道为什么目标 network.online 处于活动状态,它的含义一定与我的假设不同。
在引导到恢复模式期间,我还在控制台上看到:
[ DEPEND ] Dependency failed for Network Manager wait online
...
Reached Target Network is online
但是,网络没有以正常方式运行:我无法 ping 此主机名的静态 IP4 地址(结果: 网络无法访问)。尽管我可以 ping 127.0.0.1,但我无法引用本地网络上的任何其他计算机。所以网络没有完全运行,这就是我想要避免的,即我希望我的服务只在网络完全运行时启动。
似乎我还没有理解目标网络在线的真正含义?
当我的服务尝试启动时,它会因为相关服务不可用而超时,所以systemctl status myservice.service
显示
● myservice.service - description
Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: timeout) since Fri 2020-07-24 16:40:45 BST; 7s ago
Process: 1396 ExecStartPre=/usr/local/bin/get_kerberos_tickets.ksh (code=killed, signal=HUP)
Tasks: 0
Memory: 3.4M
CPU: 529ms
Jul 24 16:40:45 t7810 systemd[1]: myservice.service: Unit entered failed state.
Jul 24 16:40:45 t7810 systemd[1]: myservice.service: Failed with result 'timeout'.
如果我修改我的单元文件以添加multi-user.target
到 WANTS 和 AFTER 行,那么我的服务也会尝试启动,即使 root shell 然后显示systemctl list-units -target
有 multi-user.target “加载非活动死”。