![多个目标都需要 Systemd 服务](https://linux22.com/image/64758/%E5%A4%9A%E4%B8%AA%E7%9B%AE%E6%A0%87%E9%83%BD%E9%9C%80%E8%A6%81%20Systemd%20%E6%9C%8D%E5%8A%A1.png)
有没有办法制作多个目标所需的服务(或具有多个安装指令),以便在安装时在所有位置创建符号链接。
我的示例是以下 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
它的作用是运行一个脚本来修复我的机器的音频映射(如果没有它,声音仅来自低音炮 - 这是非常无用的)。不幸的是,在睡眠/挂起/休眠之后,映射似乎会重置,因此我还需要在醒来时触发此脚本。
有什么说法WantedBy=multi-user.target,sleep.target
或者类似的吗?
我似乎找不到任何有关此的文档。或者,是否有更好的方法来实现我的需求?
答案1
是的,有,引用相关部分system.unit 的手册页:
WantedBy=, RequiredBy=
该选项可以多次使用,或者可以给出以空格分隔的单位名称列表。当该单元安装时,会在每个列出的单元的 .wants/ 或 .requires/ 目录中创建一个符号链接系统控制启用。这具有将类型Wants=
或的依赖性Requires=
从列出的单元添加到当前单元的效果。主要结果是当前单元将在列出的单元启动时启动。详细信息请参见[Unit]部分中的Wants=
和的描述。Requires=
WantedBy=foo.service在服务中
bar.service
主要相当于 别名=foo.service.wants/bar.service在同一个文件中。如果是模板单位,系统控制启用必须使用实例名称来调用,并且该实例将被添加到列出的单元的.wants/
或列表中。.requires/
例如WantedBy=getty.target在服务中将[email protected]
导致系统控制启用[电子邮件受保护] 创建到 的链接 。getty.target.wants/[email protected]
[email protected]
不过,如果您想为多个目标运行此命令,请确保在必要时通过Before=
或After=
指令调整顺序(例如关闭或挂起)(手册页中也对此进行了解释;))。