这是我的服务文件:
[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当启用时,它看起来很有希望:
# 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给出了以下内容:
# 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启动后续单元之前,进程必须退出。
有什么想法吗?
发布于 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=配置的需求依赖项并与之正交。
https://unix.stackexchange.com/questions/349787
复制相似问题