gpt4 book ai didi

service - 绑定(bind)服务的 Systemd 计时器重新启动它绑定(bind)的服务

转载 作者:行者123 更新时间:2023-12-05 07:06:39 26 4
gpt4 key购买 nike

我有两个系统服务 ab,其中 b 是“After”和“BindsTo” ab 是每分钟使用 systemd 计时器启动的短命令。

这是我的配置:

$ cat /systemd/a.service
[Unit]
After=foo
BindsTo=foo

[Service]
ExecStart=/opt/a/bin/a
Group=lev
User=lev
Restart=Always
WorkingDirectory=/opt/a

$ cat /systemd/b.service
[Unit]
After=a
BindsTo=a

[Service]
ExecStart=/opt/b/bin/b
Group=lev
User=lev
WorkingDirectory=/opt/b

$ cat /systemd/b.timer
[Unit]

[Timer]
OnCalendar=*:0/1:00

当我运行 sudo systemctl stop a 时,服务 a 确实停止了,但是它会在下一分钟的顶部重新启动,当服务计时器b 运行 b

systemd 文档指出 BindsTo

declares that if the unit bound to is stopped, this unit will be stopped too.

( https://www.freedesktop.org/software/systemd/man/systemd.unit.html#BindsTo= )

我希望通过停止 ab 也会停止,并且计时器会被禁用。不是这种情况。您能帮忙解释一下为什么 b 计时器不仅会重启 b(应该会失败),还会重启 a 吗?

你能帮我编辑这些服务吗:

  • 在启动时,首先启动 a,然后启动 b
  • 当我sudo systemctl stop a时,b的定时器没有运行
  • 当我sudo systemctl start a时,b的计时器再次开始运行

提前致谢!

最佳答案

以下是满足您的限制条件的最简单的单位:

test-a.service

[Service]              
ExecStart=sleep 3600 # long-running command

test-b.service

[Service]     
ExecStart=date # short command

test-b.timer

[Unit]                                
After=test-a.service
BindsTo=test-a.service # makes test-b.timer stop when test-a.service stops

[Timer]
OnCalendar=* *-*-* *:*:00

[Install]
WantedBy=test-a.service # makes test-b.timer start when test-a.service starts

不要忘记

  • systemctl daemon-reload
  • systemctl 禁用 test-b.timer
  • systemctl 启用 test-b.timer应用 [Install] 部分中的更改。

解释:

  • 你想要的是将a.service绑定(bind)到b.timer,而不是b.service
  • b.service只是一个简短的命令,systemctl start b.service只会运行命令,不会启动相关的定时器
  • 只有systemctl start b.timer会启动定时器
  • WantedBy 告诉 systemd 在 test-a.service 启动时启动 test-b.timer
  • BindsTo 告诉 test-b.timer 在 test-a.service 停止时停止
  • After 仅确保 test-b.timer 不会与 test-a.service 同时启动:它将强制 systemd 启动 test-b.timer after test-a.service 已完成启动。

关于您观察到的行为:

  • 当您停止a.service 时,b.timer 仍然处于事件状态并且它尝试启动b.service 来运行它的短时间命令。由于您的 b.service 指定了 BindsTo=a.service,systemd 认为 b.service 需要 a.service也将启动,并有效地重新启动 a.service 以使 b.service 正常运行。

关于service - 绑定(bind)服务的 Systemd 计时器重新启动它绑定(bind)的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62399301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com