我试图在指定的时间后重新启动服务器。
如果在服务器上登录,可以通过这样的命令来实现:
sleep 10 && reboot为了使此命令保持活动状态(没有tmux或屏幕),即使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)进程在许多方面受到限制(例如,无法读写文件--因此,如果重新启动命令抛出错误,则无法记录任何内容)。
所有命令都是在Fedora 32上与root用户一起执行的。
感谢@UlrichSchwarz,我偶然发现了这个诡计:
echo 'sleep 30; reboot' | at now这也适用于ssh:
ssh user@server -t "echo 'sleep 30; reboot' | at now"at与setsid和& disown有什么不同?
发布于 2020-11-30 13:09:35
我认为您的需求将由关机命令提供服务,如果需要的话,该命令能够将其活动安排到稍后的日期。例如,使用"-r“开关重新启动,使用"+1”延迟1分钟。但是,关机确实需要使用sudo来提升。
sudo shutdown -r '+1'您也可以使用"now“而不是"+1”来立即重新启动。
sudo shutdown -r nowhttps://unix.stackexchange.com/questions/614596
复制相似问题