#!/bin/bash snapshots_dir= verbose=false OPTS="`getopt -l dir:,verbose: -- "$@"`" while test $# -gt 0; do case $1 in --dir) snapshots_dir="$2"; shift ;; --verbose) verbose="$2"; shift ;; --) shift; break ;; esac shift done if $verbose; then verbose="set -x" else verbose="" fi $verbose if [ x"$snapshots_dir" = x"" ]; then echo "ERROR: --dir DIR not specified" exit 1 fi declare -A pids declare -A results todo_machines="$@" for M in $todo_machines; do ( $verbose rsync -az --delete $snapshots_dir-new/ $M:$snapshots_dir-new/ ssh -fn $M "flock -x $snapshots_dir.lock -c \"rsync -a --delete ${snapshots_dir}-new/ $snapshots_dir/\"" ) > /tmp/update-snapshots-ref.$$.$M 2>&1 & pids[$M]=$! done for M in $todo_machines; do set +e echo "Waiting completion for $M..." wait ${pids[$M]} results[$M]=$? set -e sed -e "s/^/$M: /" < /tmp/update-snapshots-ref.$$.$M rm /tmp/update-snapshots-ref.$$.$M done all_ok="0" for M in $todo_machines; do if [ ${results[$M]} = 0 ]; then result="SUCCESS" else result="FAILED" all_ok="1" fi echo "$result: $M" done exit $all_ok