我正在尝试在指定时间后重新启动服务器。
如果登录到服务器,可以使用如下命令来实现:
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)
过程在很多方面受到限制(例如,无法读取和写入文件 - 因此,如果重新启动命令抛出错误,我无法记录任何内容)。
所有命令均由root
Fedora 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