我正在尝试在一堆服务器上远程启动修剪命令,因为这些是设备,如果您在本地更改诸如 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
进程负责实际执行它。