lunch - The Lunch Distributed Process Manager
lunch [config file] [options]
Lunch is a distributed process launcher for GNU/Linux. The Lunch master
launches lunch-slave processes through an encrypted SSH session if on a
remote host. Those slave processes can in turn launch the desired
show program’s version number and exit
show this help message and exit
-f CONFIG_FILE, --config-file=CONFIG_FILE
Specifies the python config file. You can also simply specify
the config file as the first argument.
-l LOGGING_DIRECTORY, --logging-directory=LOGGING_DIRECTORY
Specifies the logging and pidfile directory for the master.
Default is /var/tmp/lunch
Enables logging master infos to file and disables logging to
Enables the graphical user interface.
See the examples directory for examples. On a Debian or Ubuntu system,
they should located in the /usr/share/doc/lunch/examples/ directory.
Here is the simplest example possible for the contents of a ~/.lunchrc
file. It tells Lunch to call only one command, called "xeyes".
If you add more calls to add_command in this file, it will add more
processes tobe launched by Lunch. The add_command is the Python
function you need to call from your Lunch configuration file in order
to add commands to be called by Lunch. If you add more than one
command, they will be called in the order you add them in the file.
Here is a more complex example of a configuration file. It creates
three processes, with dependencies between processes.
add_command("xclock", depends=["xeyes", "xlogo"])
The configuration file above will first start xeyes, and next xlogo,
and finally xclock. If xeyes quits, all three processes will be stopped
and restarted. If the xlogo process quits, the xclock will be stopped
and restarted again when the xlogo is running. The "depends" keyword
argument of the "add_command" function needs a list of strings as
argument. Those string must match the "title" keyword argument of an
already added command.
In the next example, we use SSH to launch processes on a remote host.
add_command("xeyes", user="johndoe", host="example.org")
It will create a process tree such as this one :
The next one is a command that is run only once.
add_command("ls -l", title="listing...", respawn=False)
If, for some reason, it is easier for you to specify the host name for
every command you add, even for the local host, you can call
"add_local_address" with the master’s IP as an argument.
# We will not use SSH for this one,
# since we just added its host using the
# "add_local_address" function.
# We will use SSH for the next one,
# since its host is not set as being the local host.
add_command("xeyes -geometry 300x400",
The lunch executable is called the lunch master. The lunch-slave
executable is called the lunch slave. If run as a master, it launches
slaves. The slaves are responsible for launching child processes. The
master launches slaves (via SSH or not) which, in turn, launch child
The Lunch configuration file can be provided as a first argument to the
lunch executable. If not given, the Lunch master will look for the
~/.lunchrc file. If not found, lunch will print an error and exit. The
lunch config file is written in the Python programming language, and
must call the add_command function.
The pid of the master is written to a file located in
/var/tmp/lunch/master*.pid, where * varies depending on the lunch
config file used to configure the master. Here is how to kill every
lunch master on your system :
for f in /var/tmp/lunch/master-*.pid; do kill -15 $(cat $f); done
GRAPHICAL USER INTERFACE
When invoked with the --graphical option, (-g) the lunch master shows a
graphical user interface displaying the state of every managed process.
When this window is closed, the lunch master exits and kills all its
SSH KEYS MANAGEMENT
If using for more than one host, lunch needs a SSH server installed on
each remote computer. It is also needed that the public SSH key of your
user on the master computer must be installed on every slave computer.
Here is a summary of the steps to do to create a SSH key on your master
computer, and send your public key on each slave computer.
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -f ~/.ssh/id_rsa -t rsa
Next, for each slave host, do:
$ ssh-copy-id <username>@<host>
$ ssh username@host ’echo Hello’
The latter command should display "Hello" when issued.
2010 - Ported from multiprocessing to Twisted
2009 - Written by Alexandre Quessy <firstname.lastname@example.org> with
contributions from Simon Piette <email@example.com>
See http://svn.sat.qc.ca/lunch for help and documentation.