从 ssh 运行脚本,注销并继续脚本

从 ssh 运行脚本,注销并继续脚本

这里的总体问题是 - 如何自动 ssh 到机器,运行脚本,并在不终止脚本的情况下退出?我知道这个问题已经被回答过好几次了,但我找到的解决方案并不顺利。

细节:

我在几台通过 ssh 连接的机器上运行着代码。

现在,我在终端中执行以下操作:

ssh machine1@host (log in automatically with key)
screen -S screen_name
./script.sh
<keystroke C-a-d>
exit

耗时,更重要的是,容易出错(打开一个屏幕并在不运行脚本的情况下退出等)。

我想自动化这个。我的第一个想法是尝试完全复制这个。我尝试使用 xdotool 发送击键,但我的环境只有命令行,它似乎不适合这个工作。同样,expect 看起来可以代替 xdotool,但同样,这可能是错误的方法。

我还尝试使用 nohup 代替 screen,方法是执行 nohup ./script.sh &

但是当我退出 ssh 会话并返回时,脚本似乎在退出时停止运行。据我所知,nohup 是正确的方法。

答案1

总结:

$ ssh host 'nohup your-command &' &

以下是一个例子:

$ ssh localhost 'nohup sleep 10 &' &
[1] 12345
$ sleep 5 && ps x | grep '[s]leep 10'
24044 pts/0    S      0:00 ssh localhost nohup sleep 10 &
24054 ?        S      0:00 sleep 10

这将启动 SSH 连接,sleep 10在目标主机(恰好是您的本地主机)的后台运行,并检查进程列表(ps)以验证它是否仍在运行 ssh完成。

相关内容