如何强制 systemd 服务在开机时启动

如何强制 systemd 服务在开机时启动

如果我遗漏了细节,我很抱歉,我可能不知道 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

man systemd.unit

[Install] 在运行时不被 systemd(1) 解释;在安装单元期间,systemctl(1) 工具的启用和禁用命令会使用它。

因此,除非您使用 ,否则该部分中出现的任何内容[Install]都不会产生任何效果systemctl enable

仅供参考:使用 systemctl 启用一切正常,

这是预期的行为。 systemctl enable将添加一个持久的符号链接,因此从现在到禁用时的每次启动都会导致该单元触发。

但我希望它默认启用。

安装不仅仅是复制文件。通常,一个包将:

  1. 将服务安装到/lib/systemd/system/
  2. systemctl enable服务
  3. systemctl start服务

因此,您的安装的一部分应该是systemctl enable.


我记得在 systemd 的早期,有很多人不希望默认启用服务。例如,Arch 软件包默认情况下没有enable/ startservices。

在 Debian 中,有一个名为 helper 的程序deb-systemd-helper,它由包使用,而不是systemctl enable直接调用。它会做一些事情,例如enable根据vendor preset(您的已启用)决定是否使用某个单元,同时如果您在升级之前明确禁用/屏蔽它,则尊重您的决定。它还可以执行一些其他方便的操作,例如在更新单位时重置/重新加载单位,或者在卸载单位之前停止单位。

相关内容