因此,我通过ssh在机器A到机器B的脚本中“指令”一个命令(顺便说一句是脚本),并将其发送到后台。该命令如下所示:ssh -T MACHINEB SCRIPT &
我在机器A上运行的脚本没有超时。有时,我注意到命令/脚本的指令存在于机器B上(如果我为此做ps),但是有点挂起。ps显示正确的PID和PPID,但仅此而已,它还没有完成。
我正在尝试查找可能导致进程挂起的原因。我的意思是,我几乎可以肯定与代码相关,我只想舍弃以下可能性以及你们可能会添加的其他任何内容。
当我运行远程ssh脚本执行时,我的进程是否已附加到ssh会话?因此,如果我从A到B存在网络或ssh问题,我的过程会受到影响吗?
谢谢
ssh -T MACHINEB SCRIPT &
只要SCRIPT正在运行,就使SSH连接保持运行状态。它需要这样做,因为:
ssh
进程以该状态退出。如果连接断开,则在不尝试读写stdin,stdout或stderr的情况下,这不会影响SCRIPT。由于不涉及任何终端,因此当连接断开时,SCRIPT不会被SIGHUP杀死。但是,如果SCRIPT确实尝试打印一条错误消息,则该消息将通过连接。
您应该执行以下两项操作之一。
批处理作业方法:确保SCRIPT不接受任何输入,并且将标准输出和标准错误记录到文件中。
ssh -T MACHINEB 'myprogram </dev/null >myprogram.log 2>&1'
交互式方法:在屏幕多路复用器内运行SCRIPT:Screen或tmux。
ssh -T MACHINEB screen -S somename -dm myprogram
您可以通过附加到该屏幕会话来查看程序的运行情况。
ssh MACHINEB screen -S somename -dr
当程序退出时,屏幕会话退出。要使其保持可见状态以查看程序的输出和错误,请参阅在执行脚本结束后防止GNU屏幕终止会话
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句