0

我知道标题有点混乱,但这是我的情况

#!/bin/bash
for node in `cat path/to/node.list`
do
        echo "Checking node: $node" 
        ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no me@$node "nohup  scriptXYZ.sh"
done

基本上 scriptXYZ 有一个输出。像:Node bla is UpNode bla is Down。我想做一些相当于以下伪代码的事情:

if (output_from_scriptXYZ == "Node bla is Up")
    do this
else 
    do that

我一直在尝试找到一种在线执行此操作的方法,但找不到可以执行此操作的方法。再说一次,我可能不知道我在寻找什么。

另外作为奖励:有什么方法可以判断 scriptXYZ 在运行时是否有错误?类似于“文件不存在”之类的东西——不是脚本本身,而是脚本试图做的事情,从而导致错误。

4

1 回答 1

1

首先,scriptXYZ.sh如果节点已启动,是否可以退出为 0,否则为非零?然后您可以简单地执行以下操作,而不是捕获输出。脚本标准输出和标准错误将连接到您的本地终端,因此您将看到它们,就像您在本地运行它一样。

#!/bin/bash
while read -r node; do
    echo "Checking node: $node" 

    if ssh -o UserKnownHostsFile=/dev/null \
           -o StrictHostKeyChecking=no me@$node scriptXYZ.sh; then
       do something
    else
       do something else
    fi
done < path/to/node.list

使用 运行脚本并没有什么意义nohup,因为您需要保持连接才能将结果发送回本地主机。

于 2012-09-18T20:36:39.243 回答