running same script over many machines

倖福魔咒の 提交于 2019-12-11 21:09:17

问题


I have setup a few EC2 instances, which all have a script in the home directory. I would like to run the script simultaneously across each EC2 instance, i.e. without going through a loop.

I have seen csshX for OSX for terminal interactive useage...but was wondering what the commandline code is to execute commands like

ssh user@ip.address . test.sh

to run the test.sh script across all instances since...

csshX user@ip.address.1 user@ip.address.2 user@ip.address.3 . test.sh 

does not work...

I would like to do this over the commandline as I would like to automate this process by adding it into a shell script.

and for bonus points...if there is a way to send a message back to the machine sending the command that it has completed running the script that would be fantastic.


回答1:


will it be good enough to have a master shell script that runs all these things in the background? e.g.,

#!/bin/sh
pidlist="ignorethis"
for ip in ip1 ip2
do
    ssh user@$ip . test.sh &
    pidlist="$pidlist $!" # get the process number of the last forked process
done

# Now all processes are running on the remote machines, and we want to know
# when they are done.

# (EDIT) It's probably better to use the 'wait' shell built-in; that's
# precisely what it seems to be for.
while true
do
    sleep 1
    alldead=true
    for pid in $pidlist
    do
        if kill -0 $pid > /dev/null 2>&1
        then
            alldead=false
            echo some processes alive
            break
        fi
    done
    if $alldead
    then
        break
    fi
done

echo all done.

it will not be exactly simultaneous, but it should kick off the remote scripts in parallel.



来源:https://stackoverflow.com/questions/13813076/running-same-script-over-many-machines

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!