Shell脚本不完全执行并在其间退出

时间:2014-06-25 09:31:27

标签: linux shell expect

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

问题run_check_node.sh脚本大约需要25分钟才能执行。但是远程linux机器上的run_check_node.sh脚本执行在大约3-4分钟后停止,然后进行下一次for循环迭代。在下一次迭代中也会发生同样的事情。我尝试使用set timeout 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

1 个答案:

答案 0 :(得分:0)

现在,这可能无法解释为什么您正在看到您所看到的内容,但这可能是一种有用的解决方法。

您尝试在后台的远程上执行run_check_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脚本对它进行任何检查,所以我认为它可能有效对你而言。

尝试一下,让我知道它是怎么回事。