通读man 5 systemd.unit
并man 5 systemd.target
告诉我们,单位文件用于定义目标以及所有其他systemd。没有专门针对如何创建目标的文档,因此很难确定应如何完成目标,但是与创建服务并没有太大区别。
创建目标时,需要从systemd services目录建立指向该target.wants
目录的符号链接。然后,您可以设置/启动目标。在您的示例中,外观如下所示。
/etc/systemd/system/foo.target
这是目标的单位文件。如果以graphical.target为例,我们可以使用它作为基础来创建自己的目标。
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
解释系统手册中的选项;
Description
-描述目标。你应该明白
Requires
-目标的严格依赖关系。您应该先启动基本系统,然后再启动自己的服务
Wants
-软依赖性。目标不需要这些启动。
Conflicts
-如果一个单元在另一个单元上设置了“冲突”,则启动前者将停止后者,反之亦然。
After
-这些服务后启动
AllowIsolate
-取决于您和您的环境。详细信息可在手册页中找到systemd.unit(5)
/etc/systemd/system/foo.target.wants/
这是目录,您将在其中链接为目标创建/需要的服务。它等效Wants=
于单位文件中的选项。创建该目录,然后创建符号链接,如下所示:ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
。这将创建从系统目录中的bar.service到foo.target.wants目录的符号链接。
我认为为服务创建单位文件超出了此答案的范围,并且该问题肯定有更多记录,因此我暂时将其省略。创建单位文件时,只需将其符号链接到target.wants目录中或将其添加到Wants=
指令中即可。