首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略Systemd RequiredBy指令

忽略Systemd RequiredBy指令
EN

Unix & Linux用户
提问于 2017-03-07 17:20:56
回答 1查看 3.8K关注 0票数 2

这是我的服务文件:

代码语言:javascript
复制
[Unit]
Description=Blabla service
Requires=network-online.target nfs-common.service
After=network-online.target nfs-common.service

[Service]
Type=oneshot
ExecStart=/path/to/script
RemainAfterExit=no

[Install]
RequiredBy=php5-fpm.service apache2.service nginx.service

当启用时,它看起来很有希望:

代码语言:javascript
复制
# systemctl enable blabla.service 
Created symlink from /etc/systemd/system/php5-fpm.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/apache2.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/nginx.service.requires/blabla.service to /etc/systemd/system/blabla.service.

然后,在重新启动之后,systemd-analyze给出了以下内容:

代码语言:javascript
复制
# systemd-analyze blame
         18.434s blabla.service
          5.942s cloud-init.service
          2.766s networking.service
          1.671s apache2.service
          1.398s cloud-init-local.service
          1.276s newrelic-sysmond.service
           856ms php5-fpm.service
           586ms nginx.service
           .....

根据docs Type=oneshot

oneshot的行为类似于简单;但是,在systemd启动后续单元之前,进程必须退出。

有什么想法吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2017-03-07 17:51:58

RequiredBy=并不意味着一个服务应该一个接一个地启动。

man systemd.unit中,RequiredBy=的文档说:

主要结果是,当前单元将在上市单元启动时启动。

换句话说,它们最终可能是并行启动的。我认为您需要在安装部分中使用Before=指令。man systemd.unit中的文档有关于Before=的如下内容:

如果一个单元foo.service包含一个设置Before=bar.service,并且两个单元都正在启动,bar.service的启动将延迟到foo.service启动。请注意,此设置独立于Requires=配置的需求依赖项并与之正交。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/349787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档