Flag for vxargs, an xargs-a-like that runs its multiple command invocations in parallel and provides a (ncurses) histogram of the progress. Its companion program pattern provides an easy way to generate IP / hostnames based on a logical sequence. Together the make a reasonble way to run a command on a bunch of hosts and collate the stdout, stderr and exit status of each.
As a same-same-but-different alternative to
- pssh
- That xterm multiplexer I can never remember the name of
- screen(1) and Terminal.app's send-to-many option
- Quick and dirty shell scripts iterating over a host list
- Capistrano's shell (even on hosts that don't run any other Ruby!)
... it's proving pretty solid.
Example:
[admin@manage3 tmp]$ pattern.py foo[1-8] | vxargs -y -o ~/tmp ssh {} varnishadm -Tlocalhost:6082 ping
Terminal clears, and shows progress:
8/8:ssh -l root foo8 varnishadm -Tlocalhost:6082 ping
Done
Done
Done
Done
Done
( 10s) 6: foo7
Done
and exits
exit code 0: 7 job(s)
exit code 1: 1 job(s)
total number of jobs: 8
Now you can inspect the output from each host, exit status and an overall failure list
[admin@manage3 tmp]$ cat ~/tmp/abnormal_list
foo5
[admin@manage3 tmp]$ cat ~/tmp/foo5.err
Warning: Permanently added 'foo5,10.221.11.0' (RSA) to the list of known hosts.
connect(): Connection refused
An error occured in receiving status.
Via Trivium
last updated: