如果我遗漏了细节,我很抱歉,我可能不知道 systemd 上的所有区域,我试图让我的磷看门狗服务在另一个服务之后自动启动,我无法理解为什么它默认被禁用。
> /lib/systemd/system# ls |grep phosphor-watchdog
>
> [email protected]
>
> [email protected]
/lib/systemd/system# systemctl status [email protected]
● [email protected] - Phosphor poweron watchdog
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/[email protected]
└─poweron.conf
Active: inactive (dead)
这是磷看门狗服务的服务文件:
[Unit]
Description=Phosphor %I watchdog
[email protected]
After=pwr-monitor.service
[Service]
Restart=always
EnvironmentFile={envfiledir}/obmc/watchdog/%I
ExecStart=/usr/bin/env phosphor-watchdog --continue --service=${{SERVICE}} --path=${{DEVPATH}} --target=${{TARGET}}
SyslogIdentifier=phosphor-watchdog
[Install]
WantedBy=multi-user.target
并为[电子邮件受保护]/poweron.conf:
[Unit]
[email protected]
[email protected]
[email protected]
我想知道为什么我的服务总是被禁用,尽管存在“WantedBy=multi-user.target”
仅供参考:使用 systemctl enable 一切正常,但我希望默认情况下启用它。
如果我需要提供更多信息,请告诉我。谢谢。
答案1
[Install]
WantedBy=multi-user.target
[Install] 在运行时不被 systemd(1) 解释;在安装单元期间,systemctl(1) 工具的启用和禁用命令会使用它。
因此,除非您使用 ,否则该部分中出现的任何内容[Install]
都不会产生任何效果systemctl enable
。
仅供参考:使用 systemctl 启用一切正常,
这是预期的行为。 systemctl enable
将添加一个持久的符号链接,因此从现在到禁用时的每次启动都会导致该单元触发。
但我希望它默认启用。
安装不仅仅是复制文件。通常,一个包将:
- 将服务安装到
/lib/systemd/system/
systemctl enable
服务systemctl start
服务
因此,您的安装的一部分应该是systemctl enable
.
我记得在 systemd 的早期,有很多人不希望默认启用服务。例如,Arch 软件包默认情况下没有enable
/ start
services。
在 Debian 中,有一个名为 helper 的程序deb-systemd-helper
,它由包使用,而不是systemctl enable
直接调用。它会做一些事情,例如enable
根据vendor preset
(您的已启用)决定是否使用某个单元,同时如果您在升级之前明确禁用/屏蔽它,则尊重您的决定。它还可以执行一些其他方便的操作,例如在更新单位时重置/重新加载单位,或者在卸载单位之前停止单位。