Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本未完全执行,并在两者之间退出_Linux_Shell_Expect - Fatal编程技术网

Linux Shell脚本未完全执行,并在两者之间退出

Linux Shell脚本未完全执行,并在两者之间退出,linux,shell,expect,Linux,Shell,Expect,在下面的代码(将在我的linux机器上运行)中,我试图将run_check_node.sh复制到两个不同的远程linux机器上,然后仅从我的机器上执行该脚本。 问题:执行运行检查节点.sh脚本大约需要25分钟。但是在远程linux机器上执行run\u check\u node.sh脚本大约3-4分钟后停止,然后执行for循环的下一次迭代。在下一次迭代中也会发生同样的事情。我尝试使用设置超时1200,来解释这25分钟,但仍然存在相同的问题。有人能帮忙做什么吗 问题:我正在使用的机器IP,有时要求输

在下面的代码(将在我的linux机器上运行)中,我试图将
run_check_node.sh
复制到两个不同的远程linux机器上,然后仅从我的机器上执行该脚本。

问题:执行
运行检查节点.sh
脚本大约需要25分钟。但是在远程linux机器上执行
run\u check\u node.sh
脚本大约3-4分钟后停止,然后执行
for
循环的下一次迭代。在下一次迭代中也会发生同样的事情。我尝试使用
设置超时1200
,来解释这25分钟,但仍然存在相同的问题。有人能帮忙做什么吗

问题:我正在使用的机器IP,有时要求输入密码,有时不要求。所以,我期待着它。所以,若并没有询问密码,它只会在控制台上抛出一些消息,然后继续执行下面的脚本。请说明这是否是处理是否询问密码的正确方法

#!/bin/bash

Linux1_ip=10.20.30.40
Linux2_ip=10.100.20.30
pass="Gaur"

IP=("$Linux1_ip" "$Linux2_ip")
home="/post_checks"


############################ Linux_ip CHECKS ####################################
for ne in "${IP[@]}"
do
        expect -c "
           spawn ssh root@$ne \"mkdir /post_checks_$ne\"
           expect yes/no { send yes\r; exp_continue }
           expect password { send $pass\r; exp_continue }
           exit
                "
         expect -c "
           spawn scp $home/run_check_node.sh root@$ne:/post_checks_$ne/
           expect yes/no { send yes\r; exp_continue }
           expect password { send $pass\r; exp_continue }
           exit
                "       
        expect -c "
           spawn ssh root@$ne \"chmod +x /post_checks_$ne/run_check_node.sh; bash /post_checks_$ne/run_check_node.sh\"
           expect yes/no { send yes\r; exp_continue }
           expect password { send $pass\r; exp_continue }
           exit
                "               
    fi
done
现在,这也许不能解释为什么你看到了你所看到的,但它可能是一个有用的解决方法

您是否可以在后台远程执行
run\u check\u node.sh
shell脚本?然后断开连接,让它自己完成

所以,基本上,你的第三个繁殖系是:

spawn ssh root@$ne \"chmod +x /post_checks_$ne/run_check_node.sh; bash /post_checks_$ne/run_check_node.sh &\"
如果您需要检查shell脚本的完成情况,那么我的建议是不可接受的。。。但是我没有看到你的Bash脚本对此进行任何检查,所以我认为它可能适合你


尝试一下,让我知道它是如何运行的。

当您从命令行使用ssh,并且在远程屏幕中不输入任何内容时,您的连接将有效多长时间?您能在5分钟后输入命令吗?但是我的run\u check\u node.sh脚本正在远程主机上连续执行命令。每个命令都在新的ssh会话中运行。每个会话都会有一个超时,您可能会看到一个交互式shell。您的“设置超时1200”可能不是解决方案。James的解决方案可能会起作用,防火墙、远程或本地系统、超时设置等会导致超时。我还想从run_check_node.sh收集日志,如果在后台运行,我将无法获得:(后台进程可以登录文件。您的收集脚本可以grep/tail日志文件。