如果一个进程运行systemctl restart something.service
,而第二个进程也systemctl restart something.service
稍后运行(但在第一个命令返回之前),systemd 会做什么?
第二个命令会restart
“等待”第一个命令完成,然后发出新的重启命令吗?或者如果重启已经在进行中,它基本上不会产生任何效果?还是其他原因?
答案1
重启将对停止作业和启动作业进行排队。默认情况下,所有作业都使用“替换”模式进行排队;这意味着如果单元已经启动,它将立即停止(中止任何正在进行的启动),然后重新启动。
使用单独的启动/停止操作,您可以使用--job-mode=
(例如start --job-mode=replace-irreversibly
或stop --job-mode=fail
)来控制它,但似乎restart
子命令不能正确传播指定的作业模式,至少在当前的 systemd 版本中是这样。