这里的总体问题是 - 如何自动 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
完成。