vxargs – visual parallel xargs

Friday, 18. 09. 2009  –  Category: sw

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

One Response to “vxargs – visual parallel xargs”

  1. Ole Tange Says:

    A more general tool for running things in parallel is Parallel https://savannah.nongnu.org/projects/parallel/

    seq 1 8 | parallel ssh foo{} varnishadm -Tlocalhost:6082 ping

Leave a Reply