多个目标需要的 Systemd 服务

flu*_*ngo 10 systemd services

有没有办法让多个目标想要一个服务(或有多个安装指令),以便在安装时在所有地方创建一个符号链接。

我的示例是以下 systemd 文件

[Unit]
Description=Run script to fix-audio mappings

[Service]
Type=forking
ExecStart=/bin/bash -c '/usr/local/bin/fix-audio &'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这样做是运行一个脚本来修复我机器的音频映射(如果没有它,声音只会来自低音炮 - 这是非常无用的)。不幸的是,在睡眠/挂起/休眠之后,映射似乎重置了,所以我还需要在醒来时触发这个脚本。

有没有WantedBy=multi-user.target,sleep.target类似的说法?

我似乎找不到任何关于此的文档。或者,有没有更好的方法来实现我的需要?

dok*_*000 11

是的,引用system.unit 手册页的相关部分:

WantedBy=, RequiredBy=这个选项可以多次使用,或者可以给出一个以空格分隔的单位名称列表。当systemctl enable安装此单元时,会在每个列出的单元的 .wants/ 或 .requires/ 目录中创建符号链接。这具有将类型Wants=或依赖项Requires=从列出的单元添加到当前单元的效果。主要结果是当前单元将在列出的单元启动时启动。看到的描述Wants=Requires=在所述[单位]部分的详细说明。

WantedBy = foo.service在服务bar.service主要是相当于 别名= foo.service.wants / bar.service在同一文件中。在模板单元的情况下,systemctl enable必须使用实例名称调用,并且该实例将被添加到列出的单元的.wants/.requires/列表中。例如,服务中的 WantedBy=getty.targetgetty@.service将导致systemctl enable getty@tty2.service 创建到 的getty.target.wants/getty@tty2.service链接 getty@.service

虽然如果你想为多个目标运行它,请确保在必要时调整顺序(例如关闭或挂起)通过Before=After=指令(也在手册页中进行了解释;))。