在bash上运行1个服务器而不是另一个服务器上的远程服务器上运行脚本

时间:2013-06-13 10:02:10

标签: bash shell scripting

当我在主机名中的两台服务器上运行此脚本时,它会在其中一台服务器上成功,但在另一台服务器上则不成功。

日志输出非常难看,所以我不会发布所有内容。这是bash_history的一部分,它还为fi bash提供了语法错误:语法错误接近意外令牌'fi',因为它在服务器上逐行执行它失败。

两台服务器都具有相同版本的Bash:

bash --version
GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.

Run.sh

#!/bin/bash
# See if registry is set to expire updates
# Master script

filename=hostnames
> export.log

while read -r -a line
do
        hostname=${line//\"}
        echo $hostname":" >> export.log
        ssh -t -t $hostname "bash -s" < script.sh >> export.log
done < "$filename"

exit

Script.sh

#!/bin/bash
# See if registry is set to expire updates
# Execution script

PATH=/usr/xpg4/bin:$PATH
PARAMETER=Updates
FILE=/etc/.properties

# Code must:
# - Check if FILE exists
# - If the file exists, check if the parameter Updates is set
# - If not set, set to 30.

if [ -f $FILE ];
        then if grep -q $PARAMETER $FILE;
                then echo "File found, parameter already added."
        else
                echo "File found, parameter not found."
                echo "Updates 30" | sudo tee -a $FILE
        fi
else
        echo "File not found."
fi

exit

1 个答案:

答案 0 :(得分:0)

这只是一个猜测,但我会尝试这个

filename=hostnames
> export.log

while read -r -a line
do
    hostname=${line//\"}
    echo $hostname":" >> export.log
    ssh -t -t $hostname "bash -s" < script.sh >> export.log &
done < "$filename"

exit

只是为了确保你不会卡在一台服务器上。