远程启动命令然后关闭连接

远程启动命令然后关闭连接

我正在尝试在一堆服务器上远程启动修剪命令,因为这些是设备,如果您在本地更改诸如 cron 作业之类的内容,我们将失去支持。

我正在尝试这样做:

ssh [email protected] "nohup fstrim /data &"

该命令已执行,但问题是尽管 nohup 等操作,安全 shell 仍保持打开状态。我可以强制 ssh 删除命令并立即退出吗?

刚刚通过谷歌发现了类似的请求。在那里解决了

screen -d -m ./script

不幸的是,设备上没有屏幕。

答案1

如果您已screen安装在远程服务器上,请尝试此操作,这将fstrim在独立screen会话中运行该命令。就目前而言,ssh这似乎会立即退出。

ssh [email protected] screen -S fstrim -md fstrim /data

您可以使用以下命令重新连接到会话

ssh -tt [email protected]. screen -r fstrim

并再次断开连接Ctrl a(Ctrl) d

您的初始命令不起作用的原因是因为nohup可以看到标准输出不是终端并保持描述符打开以供写入。 (如果您使用过,ssh -tt它会在远程端创建一个伪设备,并且nohup会看到一个终端。)通过重定向标准输出明确地,您可以让进程按照您的预期在后台运行:

ssh -fn [email protected] "nohup fstrim /data >nohup.out &"

阅读man nohup有关此内容的血淋淋的详细信息,现在您知道自己在寻找什么了。

答案2

没关系,相信我找到了解决方案:

ssh [email protected] "nohup fstrim /data > /dev/null &"

答案3

atd设备上正在运行吗?如果是这样,您可以立即安排at工作:

ssh [email protected] "echo 'fstrim /data' | at now"

您的远程会话将立即终止,因为它所做的只是安排作业。守护atd进程负责实际执行它。

相关内容