Systemd 未启动服务后

Kar*_*son 2 systemd ubuntu-16.04

letsencrypt.service

[Unit]
Description=Renews letsencrypt certificates
After=network.target letsencrypt_concat_fullchain_privkey.service

[Service]
Type=oneshot
WorkingDirectory=/etc/letsencrypt/
ExecStart=/usr/bin/letsencrypt renew
Run Code Online (Sandbox Code Playgroud)

当我手动启动此服务时:sudo systemctl start letsencrypt它似乎没有启动该letsencrypt_concat_fullchain_privkey.service服务。我已经跑了sudo systemctl start letsencrypt_concat_fullchain_privkey.service,它可以正常工作。

我想要做的是当letsencrypt.service完成时我希望它启动letsencrypt_concat_fullchain_privkey.service服务。

Fed*_*rra 5

After=不暗示依赖关系(只有顺序),您可以使用Requires=Wants=指令建立依赖关系。

Requires=
配置对其他单元的需求依赖。如果该单位被激活,此处列出的单位也将被激活。如果其他单元之一被停用或激活失败,则该单元将被停用。可以多次指定此选项,也可以在一个选项中指定多个空格分隔的单位,在这种情况下,将为所有列出的名称创建需求相关性。请注意,需求依赖性不会影响服务启动或停止的顺序。这必须使用After=Before=选项独立配置。如果一个单元 foo.service需要一个单元 bar.service 配置为 Requires= 并且没有配置为After=Before=,则两个单元将同时启动,如果foo.service被激活,它们之间不会有任何延迟 。通常,在处理失败服务时,使用Wants= 而不是Requires=为了实现更健壮的系统是更好的选择。

请注意,此依赖项类型并不意味着其他单元在此单元运行时必须始终处于活动状态。具体来说:失败的条件检查(例如ConditionPathExists=, ConditionPathExists=, ... - 见下文)不会导致Requires=依赖于它的单元的启动作业失败。此外,某些单元类型可能会自行停用(例如,服务进程可能决定干净地退出,或者用户可能拔出设备),这不会传播到具有Requires=依赖性的单元。使用 BindsTo=依赖类型 withAfter=来确保一个单元永远不会处于活动状态,而没有特定的其他单元也处于活动状态(见下文)。

请注意,这种类型的依赖项也可以在单元配置文件之外配置,方法是将符号链接添加到.requires/ 单元文件随附的目录中。有关详细信息,请参见上文。

想要 =
的较弱版本Requires=。如果配置单元是,则将启动此选项中列出的单元。但是,如果上市单位未能启动或无法添加到交易中,则不会影响整个交易的有效性。这是将一台设备的启动与另一台设备的启动挂钩的推荐方式。

请注意,这种类型的依赖项也可以通过将符号链接添加到.wants/单元文件随附的目录来配置在单元配置文件之外。有关详细信息,请参见上文。

参考:http : //freedesktop.org/software/systemd/man/systemd.unit.html