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
当我手动启动此服务时:sudo systemctl start letsencrypt
它似乎没有启动该letsencrypt_concat_fullchain_privkey.service
服务。我已经运行sudo systemctl start letsencrypt_concat_fullchain_privkey.service
并且它正常工作。
我想要做的是,当letsencrypt.service
完成时我希望它启动letsencrypt_concat_fullchain_privkey.service
服务。
答案1
After=
并不意味着依赖关系(仅顺序),您可以使用Requires=
或Wants=
指令建立依赖关系。
要求=
配置对其他单元的要求依赖关系。如果此单元被激活,此处列出的单元也将被激活。如果其他单元之一被停用或激活失败,此单元将被停用。可以多次指定此选项,也可以在一个选项中指定多个以空格分隔的单元,在这种情况下将创建所有列出的名称的要求依赖关系。请注意,要求依赖关系不会影响服务启动或停止的顺序。这必须使用After=
或Before=
选项单独配置。如果一个单元 需要一个单元 bar.service ,并使用 Requires= 配置,并且没有使用或foo.service
配置顺序,那么如果 被激活,两个单元将同时启动,并且它们之间没有任何延迟 。通常,为了实现一个在处理故障服务时更为健壮的系统,最好使用 而不是。After=
Before=
foo.service
Wants=
Requires=
请注意,此依赖类型并不意味着当此单元运行时,其他单元必须始终处于活动状态。具体来说:条件检查失败(例如
ConditionPathExists=
,,ConditionPathExists=
…… — 见下文)不会导致Requires=
与其有依赖关系的单元的启动作业失败。此外,某些单元类型可能会自行停用(例如,服务进程可能决定干净退出,或者设备可能被用户拔出),这不会传播到具有依赖关系的单元。将依赖类型与一起Requires=
使用 可确保单元永远不会处于活动状态,除非有其他特定单元也处于活动状态(见下文)。BindsTo=
After=
请注意,也可以通过向单元文件附带的目录添加符号链接,在单元配置文件之外配置此类型的依赖项
.requires/
。有关详细信息,请参阅上文。想要=
的较弱版本Requires=
。如果配置单元已启动,则此选项中列出的单元将启动。但是,如果列出的单元启动失败或无法添加到事务中,则不会影响整个事务的有效性。这是将一个单元的启动与另一个单元的启动挂钩的推荐方法。请注意,此类型的依赖项也可以在单元配置文件之外配置,方法是将符号链接添加到
.wants/
单元文件附带的目录中。有关详细信息,请参阅上文。
参考:http://freedesktop.org/software/systemd/man/systemd.unit.html
答案2
我想要做的是,当 letsencrypt.service 完成时,我希望它启动 letsencrypt_concat_fullchain_privkey.service 服务。
然后您要将其添加到您的letsencrypt.service
文件中:
ExecStartPost=/bin/systemctl start letsencrypt_concat_fullchain_privkey.service
该命令将在您输入的命令之后连续运行ExecStart=
。
您可以ExecStartPost=
在 中阅读更多相关信息man systemd.service
,或在 中查找任何systemd
指令man systemd.directives
。