`& disown` 和 `setsid` 不适用于 ssh!他们启动了一个“(sd-pam)”进程,该进程不起作用

`& disown` 和 `setsid` 不适用于 ssh!他们启动了一个“(sd-pam)”进程,该进程不起作用

我正在尝试在指定时间后重新启动服务器。

如果登录到服务器,可以使用如下命令来实现:

sleep 10 && reboot

为了使这个命令保持活动状态(没有 tmux 或 screen),即使 shell 终止,我尝试了许多不同的选项,但setsid& disown是最合适的选项:

setsid bash -c 'sleep 10 && reboot' &

... 或者:

bash -c 'sleep 10 && reboot' & disown

到目前为止,即使我关闭了调用此命令的 shell,这也可以在服务器上正常工作。但是因为我想通过重新启动服务器SSH并在调用该命令后立即退出(无需等待指定的sleep时间段),我认为能够使用上面调整的命令来实现这一点,如下所示:

ssh user@server -t "setsid bash -c 'sleep 10 && reboot' &"

... 或者:

ssh user@server -t "bash -c 'sleep 10 && reboot' & disown"

但有趣的是,这些命令启动一个名为该名称的进程(sd-pam),该进程将在指定的sleep时间段后退出而不执行任何操作。但如果您经常执行该命令,您会发现它在大约 10% 的情况下发挥了作用。我调查了这种行为,发现该(sd-pam)过程在很多方面受到限制(例如,无法读取和写入文件 - 因此,如果重新启动命令抛出错误,我无法记录任何内容)。

所有命令均由rootFedora 32 上的用户执行。

编辑:

感谢@UlrichSchwarz 我遇到了这个伎俩:

echo 'sleep 30; reboot' | at now

这也适用于ssh

ssh user@server -t "echo 'sleep 30; reboot' | at now"

与做事有何at不同setsid& disown

答案1

我认为 shutdown 命令可以满足您的要求,如果需要,该命令能够将其活动安排到以后的日期。例如,使用“-r”开关重新启动,使用“+1”开关延迟 1 分钟。但是,关闭确实需要使用 sudo 进行提升。

sudo shutdown -r '+1'

您也可以使用“now”而不是“+1”来立即重新启动。

sudo shutdown -r now

相关内容