Create a file production that includes the server hostnames of production servers.
Then call for instance:
./run_on.sh production 'tail -f /var/log/nginx/access.log'
| #!/bin/bash | |
| set -o errexit | |
| for command in "$@" | |
| do | |
| $command & | |
| done | |
| function kill_jobs() | |
| { | |
| job_pids=($(jobs -p)) | |
| [ "${#job_pids[@]}" -eq 0 ] || kill "${job_pids[@]}" | |
| } | |
| trap 'kill_jobs' EXIT | |
| wait |
| #!/bin/bash | |
| commands=() | |
| servers=($(cat $1)) | |
| shift | |
| commands=() | |
| for cmd in "$@" | |
| do | |
| for server in "${servers[@]}" | |
| do | |
| commands+=("ssh $server server=$server; ($cmd) 2>&1 | while read line; do echo \"\$server: \$line\"; done") | |
| done | |
| done | |
| ./parallel.sh "${commands[@]}" |