Удаленное выполнение сценария удара через ssh заставляет локальный сценарий останавливаться

У меня есть установка, которая ведет себя способом, я не могу получить голову вокруг. Таким образом, у меня есть локальный сценарий удара generateTrafficOnHosts.sh который читает IP-адреса из файла. Это затем называет сценарий удара getTraffic.sh на каждом удаленном хосте, т.е. каждом IP-адресе это звонит. Однако после первого удаленного выполнения через ssh, это только заканчивается. Вот мое локальное generateTrafficOnHosts.sh сценарий:

#!/bin/bash
# Connects to a series of hosts and runs the get-traffic.sh script on     them. 
# The hosts are taken from a file with a list of randomly generated IDs,
# while their IDs are taken from a connectfile.

# ...
# some convenience functions here
# ...

#######################################
# runs the traffic generation script on
# a host.
# Globals:
#   
# Arguments:
#   <IP of the remote host>
# Returns:
#   None
#######################################
function run_on_host() {
    local RESULTS
    RESULTS=$(ssh -i key.pem user@"$1" '/home/user/get-traffic.sh 2>&1 >/dev/null')
}

#######################################
# Runs the load on the hosts
# Globals:
#   HOSTSFILE
# Arguments:
#   None
# Returns:
#   None
#######################################
function run_load_on_hosts() {
    while read line
    do
        local ip=$(get_ip_for_key ${line})
        echo "getting IP for key in line ${line}"
        if [[ $ip != "" ]]; then
            echo "running on host $line($ip)"
            run_on_host "${ip}"
        else
            echo "error: LINE'$line', IP'$ip'"
        fi
    done < "$HOSTSFILE"
}

function main() {
    check "$@"
    run_load_on_hosts
}

main "$@"

Удаленный сценарий get-traffic.sh похож на это:

#!/bin/bash
PORT=47111

# Time limit in seconds
TIME_LIMIT=10
# Blocksize of the dd command: how much data shall be downloaded per chunk? 
BS=1M

while [[ "$SECONDS" -le "$TIME_LIMIT" ]]; do
    # $SECONDS is a shell variable
    nc "${HOST}" "${PORT}" | dd count=1 bs="${BS}" iflag=fullblock > /dev/null
done

Теперь для нечетного поведения: сценарий только работает за первым хостом в файле hosts. Если я заменяю строку ssh -i ... с, скажем, sleep 1; echo "running...", все работает гладко. То же применяется, если я заменяю удаленную команду /home/user/get-traffic.sh с, например. ls /home/user - все хорошо. Однако сценарий также возвращается после первого повторения, если я заменяю удаленную команду ls.

Я отслеживал эту ошибку в течение многих часов теперь, и у меня закончились идеи несколько часов назад. Кто-либо?!?:|

0
задан 13 April 2015 в 18:29
1 ответ

См. Руководство по ssh , более подробно о параметре -t .

Если это не сработает, попробуйте параметр -tt . Кроме того, я думаю, что ваш сценарий get-traffic.sh должен выйти из 0 в конце.

1
ответ дан 4 December 2019 в 16:59

Теги

Похожие вопросы