首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在“简单”类型的另一个systemd服务完成后启动systemd服务

如何在“简单”类型的另一个systemd服务完成后启动systemd服务
EN

Ask Ubuntu用户
提问于 2021-12-01 07:57:20
回答 1查看 971关注 0票数 3

我也见过类似的问题,但没有一个是针对我所面临的情况的。我的服务A的定义如下(注Type=simple)。

代码语言:javascript
复制
[Unit]
Description=Sample service A
Before=shutdown.target
After=multi-user.target
Requires=multi-user.target
Conflicts=shutdown.target

[Service]
Type=simple
RemainAfterExit=yes
Restart=no
ExecStart=/etc/rc.d/init.d/script_a start
ExecStop=/etc/rc.d/init.d/script_a stop

[Install]
RequiredBy=random.target

另一个服务B只需要在服务A运行完成后才能运行。我尝试了以下操作,但是服务B似乎在服务A一开始就启动了。服务B不等待A完成。

代码语言:javascript
复制
[Unit]
Description=Sample service B
After=serviceA.service
Requires=serviceA.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/scriptb start

[Install]
RequiredBy=random.target

我怎样才能使服务B等到A完成?

编辑

我也试着把OnSuccess=serviceB.service放在A服务中,但是没有帮助。

EN

回答 1

Ask Ubuntu用户

发布于 2023-03-09 12:47:30

为了使服务B等待服务A完成,可以将WantedBy选项添加到服务A中,将RequiredBy选项添加到服务B中,使用相同的目标。以下是如何修改单元文件:

服务A:

代码语言:javascript
复制
Description=Sample service A
Before=shutdown.target
After=multi-user.target
Requires=multi-user.target
Conflicts=shutdown.target

[Service]
Type=simple
RemainAfterExit=yes
Restart=no
ExecStart=/etc/rc.d/init.d/script_a start
ExecStop=/etc/rc.d/init.d/script_a stop

WantedBy=service-b.target

[Install]
RequiredBy=random.target 

关于服务B:

代码语言:javascript
复制
Description=Sample service B
After=serviceA.service
Requires=serviceA.service

RequiredBy=service-b.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/scriptb start

[Install]
RequiredBy=service-b.target

服务A标记为WantedBy此目标,服务B标记为RequiredBy此目标。这意味着服务B只在服务-b.目标值到达时才会启动,而服务-b.目标只有在服务A成功完成时才能到达。

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

https://askubuntu.com/questions/1378545

复制
相关文章

相似问题

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