psh — run a command on or copy a file to multiple nodes.
psh [ OPTIONS ] [ command [ args ] ]
psh [ OPTIONS ] [ -s ] [ files | directories ]
psh runs a command on all or a group of nodes. The output of each command is parsed and common parts are only shown once.
With the option -s or -sync,
one or more file(s) and/or entire directories (including
subdirectories) are synchronized (copied) to the selected nodes.
-c,
-configfile
file
Define a group and a configuration file to use. The file is looked up in the current directory.
-g,
-group
group
Use nodes and other parameters in group
group, defined in the
configuration file
~/.psh.d/group.
This is short for of -c
~/.psh.d/group.
-n,
-node
nodelist
Add nodes nodelist to the list of
nodes.
-x,
-xnode
nodelist
Exclude nodes nodelist from the list of
nodes.
-rcmd
command
Use command command to start up a
remote command. Command could be
pssh (default),
rsh or ssh.
-diff
command
Use command command to parse and
compare the command output. Default is diff
-q.
-autocd
path
Change to directory path on each
node before running the command or copying the file.
Default is ${PWD/${HOME}/~}. Use an
empty path ("") to disable changing
to a directory first.
-v
Be verbose.
-h
Show a help message.
Without option -g or option
-c, a default file named like the current
hostname, the current hostname without trailing numerical
characters ([0-9]*), or default
(in this order) within ~/.psh.d/ is
used. If none of this files is found, an empty template
file ~/.psh.d/default is created.
This file may be modified to fit your needs!
Nodelist is a comma separated list of
node names. The list can be abbreviated
to node-[from-to], e.g.
node-[003-115,001] will be expanded
to node-001,
node-003,
node-004, ...,
node-115.
This example shows a configuration file
~/.psh.d/rack1 defining nodes
node-01 up to node-16
within rack number 1:
## psh defaults for rack 1 ## uncomment all options you need... ## default nodelist: # node nodename[01-16] node node-[01-16] ## default remote command: # rcmd ssh -x ## don't start more than 1 remote shell at the same time? # max 1 ## be always verbose ? # verbose
To see the uptime of all nodes in rack 1, execute
# psh -g rack1 uptime
In order to compare the current date on all nodes, run
date on all nodes:
# psh date
=== node-[01-04,06-16]
Mon Jul 18 12:45:17 CEST 2005
=== node-05
Mon Jul 18 12:45:18 CEST 2005
To calculate and compare the md5sum of all Linux kernels on all
but node node-03, execute:
# psh -x node-03 md5sum /boot/vmlinux === node-[01,02,04,06-16] c9c0728c41ca03a9ee9982869e28216e /boot/vmlinuz === node-05 ff62b57a078f1f8244796c5609a053e8 /boot/vmlinuz
To copy the file /etc/hosts to all
nodes, execute:
# psh -sync /etc/hosts Prepare files for distribution: /tmp/pshout.1235 /etc/hosts Continue (y/n)?[n]
(Presuming a suitable configuration file within
~/.psh.d is found.)
The local file /etc/hosts is also
replaced by a copy of this file.
To copy the file /etc/hosts to all but the
local node, execute:
# psh -s -x `hostname` /etc/hosts Prepare files for distribution: /tmp/pshout.1236 /etc/hosts Continue (y/n)?[n]