diff options
| author | Martin Schwenke <martin@meltin.net> | 2009-05-06 13:17:34 +1000 |
|---|---|---|
| committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-05-12 08:58:04 +1000 |
| commit | 9616959bd6938e4c5c3713fe986c1e17cbdc574c (patch) | |
| tree | 937732c8e59783b2c04a2d01c187827e3ac1d9d1 /ctdb/tools/onnode | |
| parent | 9666d7bf0a87c816cb09aca8b33bfb8f15c912e9 (diff) | |
| download | samba-9616959bd6938e4c5c3713fe986c1e17cbdc574c.tar.gz samba-9616959bd6938e4c5c3713fe986c1e17cbdc574c.tar.xz samba-9616959bd6938e4c5c3713fe986c1e17cbdc574c.zip | |
New option "-o <prefix>" saves stdout from each node to file <prefix>.<ip>.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit a0f5148ac749758e2dfbd6099e829c5bf1d900e6)
Diffstat (limited to 'ctdb/tools/onnode')
| -rwxr-xr-x | ctdb/tools/onnode | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/ctdb/tools/onnode b/ctdb/tools/onnode index 5bb5ebbfb8..91d8ee815e 100755 --- a/ctdb/tools/onnode +++ b/ctdb/tools/onnode @@ -30,15 +30,16 @@ usage () cat >&2 <<EOF Usage: onnode [OPTION] ... <NODES> <COMMAND> ... options: - -c Run in current working directory on specified nodes. - -p Run command in parallel on specified nodes. - -q Do not print node addresses (overrides -v). - -v Print node address even for a single node. - <NODES> "all", "ok" (or "healthy"), "con" (or "connected"), - "rm" (or "recmaster"); - or a node number (0 base); or - list (comma separated) of <NODES>; or - range (hyphen separated) of node numbers. + -c Run in current working directory on specified nodes. + -o <prefix> Save standard output from each node to file <prefix>.<ip> + -p Run command in parallel on specified nodes. + -q Do not print node addresses (overrides -v). + -v Print node address even for a single node. + <NODES> "all", "ok" (or "healthy"), "con" (or "connected"), + "rm" (or "recmaster"); + or a node number (0 base); or + list (comma separated) of <NODES>; or + range (hyphen separated) of node numbers. EOF exit 1 @@ -55,13 +56,14 @@ current=false parallel=false verbose=false quiet=false +prefix="" parse_options () { # $POSIXLY_CORRECT means that the command passed to onnode can # take options and getopt won't reorder things to make them # options ot onnode. - local temp=$(POSIXLY_CORRECT=1 getopt -n "$prog" -o "chpqv" -l help -- "$@") + local temp=$(POSIXLY_CORRECT=1 getopt -n "$prog" -o "cho:pqv" -l help -- "$@") [ $? != 0 ] && usage @@ -70,6 +72,7 @@ parse_options () while true ; do case "$1" in -c) current=true ; shift ;; + -o) prefix="$2" ; shift 2 ;; -p) parallel=true ; shift ;; -q) quiet=true ; shift ;; -v) verbose=true ; shift ;; @@ -222,6 +225,26 @@ fakessh () CTDB_SOCKET="$1" sh -c "$2" } +stdout_filter () +{ + if [ -n "$prefix" ] ; then + cat >"${prefix}.${n}" + elif $verbose && $parallel ; then + sed -e "s@^@[$n] @" + else + cat + fi +} + +stderr_filter () +{ + if $verbose && $parallel ; then + sed -e "s@^@[$n] @" + else + cat + fi +} + ###################################################################### parse_options "$@" @@ -263,21 +286,16 @@ trap 'kill -TERM $pids 2>/dev/null' INT TERM # the part of the window where it matter is very small. retcode=0 for n in $nodes ; do + set -o pipefail 2>/dev/null if $parallel ; then - if $verbose ; then - # pipefail is a bashism - is there some way to do this with plain sh? - set -o pipefail 2>/dev/null - ($SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" 2>&1 | sed -e "s@^@[$n] @" )& - else - $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" & - fi + { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; } & pids="${pids} $!" else if $verbose ; then echo >&2 ; echo ">> NODE: $n <<" >&2 fi - $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" + { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; } [ $? = 0 ] || retcode=$? fi done |
