知道 systemd 是否真的启用

All*_*mon 5 systemd

我想弄清楚是否启用了服务。

使用 SysV Init 很容易。但是 withsystemctl status <service name>令人困惑,而且 systemd 太复杂而无法深入研究。

具体来说,我尝试启用

# systemctl enable watchdog.service
Run Code Online (Sandbox Code Playgroud)

但重启后它给了我这个状态:

# systemctl status watchdog.service
? watchdog.service - watchdog daemon
   Loaded: loaded (/lib/systemd/system/watchdog.service; static; vendor preset: enabled)
   Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)

但我无法理解 id 它已启用但发生了一些事情,或者如果启用服务命令失败。

在任何时候,手动启动服务都可以正常工作:

# systemctl start watchdog.service
# systemctl status watchdog.service
? watchdog.service - watchdog daemon
   Loaded: loaded (/lib/systemd/system/watchdog.service; static; vendor preset: enabled)
   Active: active (running) since Qua 2016-12-21 04:03:26 BRST; 2s ago
  Process: 9111 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin/watchdog $watchdog_options (code=exited, sta
  Process: 9109 ExecStartPre=/bin/sh -c [ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/modprobe
 Main PID: 9115 (watchdog)
   CGroup: /system.slice/watchdog.service
           ??9115 /usr/sbin/watchdog

watchdog[9115]: int=1s realtime=yes sync=no soft=no mla=24 mem=0
watchdog[9115]: ping: no machine to check
watchdog[9115]: file: no file to check
watchdog[9115]: pidfile: no server process to check
systemd[1]: Started watchdog daemon.
watchdog[9115]: interface: no interface to check
watchdog[9115]: temperature: no sensors to check
watchdog[9115]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=
watchdog[9115]: watchdog now set to 15 seconds
watchdog[9115]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer
Run Code Online (Sandbox Code Playgroud)

小智 9

systemctl status告诉我们该装置的状态static

# systemctl status watchdog.service
? watchdog.service - watchdog daemon
   Loaded: loaded (/lib/systemd/system/watchdog.service; static; vendor preset: enabled)
   Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)

来自man systemctl

" static" | 单元文件未启用,并且在“ [Install]”单元文件部分中没有启用的规定。

这基本上意味着[Install]服务文件中没有任何部分,因此您无法通过systemctl enable. 启用此类单元的方法是将其拉入依赖链,即使其被其他单元需要或想要。