2010-04-26 22:52:13 +00:00
|
|
|
|
2019-09-16 21:12:53 +00:00
|
|
|
GNU Parallel
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2019-09-16 21:12:53 +00:00
|
|
|
https://www.gnu.org/software/parallel/
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2019-05-01 22:58:51 +00:00
|
|
|
|
2010-04-26 22:52:13 +00:00
|
|
|
= Presentation of GNU Parallel =
|
|
|
|
|
2011-12-09 22:25:20 +00:00
|
|
|
GNU Parallel is a shell tool for executing jobs in parallel using one
|
2016-04-04 21:33:30 +00:00
|
|
|
or more computers. A job can be a single command or a small script
|
2011-05-20 23:07:45 +00:00
|
|
|
that has to be run for each of the lines in the input. The typical
|
|
|
|
input is a list of files, a list of hosts, a list of users, a list of
|
|
|
|
URLs, or a list of tables. A job can also be a command that reads from
|
2011-12-09 22:25:20 +00:00
|
|
|
a pipe. GNU Parallel can then split the input and pipe it into
|
2011-05-20 23:07:45 +00:00
|
|
|
commands in parallel.
|
|
|
|
|
2011-12-09 22:25:20 +00:00
|
|
|
If you use xargs and tee today you will find GNU Parallel very easy to
|
|
|
|
use as GNU Parallel is written to have the same options as xargs. If
|
|
|
|
you write loops in shell, you will find GNU Parallel may be able to
|
2011-05-20 23:07:45 +00:00
|
|
|
replace most of the loops and make them run faster by running several
|
|
|
|
jobs in parallel.
|
|
|
|
|
2011-12-09 22:25:20 +00:00
|
|
|
GNU Parallel makes sure output from the commands is the same output as
|
2011-05-20 23:07:45 +00:00
|
|
|
you would get had you run the commands sequentially. This makes it
|
2011-12-09 22:25:20 +00:00
|
|
|
possible to use output from GNU Parallel as input for other programs.
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2019-11-23 21:14:03 +00:00
|
|
|
See the cheat sheet for examples that cover most of the daily usage:
|
|
|
|
www.gnu.org/s/parallel/parallel_cheat.pdf
|
|
|
|
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2013-04-24 13:20:57 +00:00
|
|
|
= 10 seconds installation =
|
2013-04-21 21:33:02 +00:00
|
|
|
|
2016-11-21 21:35:25 +00:00
|
|
|
For security reasons it is recommended you use your package manager to
|
|
|
|
install. But if you cannot do that then you can use this 10 seconds
|
|
|
|
installation.
|
|
|
|
|
2017-06-18 19:15:36 +00:00
|
|
|
The 10 seconds installation will try to do a full installation; if
|
2013-04-24 13:20:57 +00:00
|
|
|
that fails, a personal installation; if that fails, a minimal
|
|
|
|
installation.
|
2013-04-21 21:33:02 +00:00
|
|
|
|
2019-05-01 22:58:51 +00:00
|
|
|
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
|
|
|
|
fetch -o - http://pi.dk/3 ) > install.sh
|
2024-05-05 21:17:00 +00:00
|
|
|
$ sha1sum install.sh | grep 51621b7f1ee103c00783aae4ef9889f8
|
|
|
|
12345678 51621b7f 1ee103c0 0783aae4 ef9889f8
|
|
|
|
$ md5sum install.sh | grep 62eada78703b5500241b8e50baf62758
|
|
|
|
62eada78 703b5500 241b8e50 baf62758
|
|
|
|
$ sha512sum install.sh | grep c0206a65dc86f2bb6bbdf1a2bc96bc6d067
|
|
|
|
160d3159 9480cf5c a101512f 150b7ac0 206a65dc 86f2bb6b bdf1a2bc 96bc6d06
|
|
|
|
7f8237c2 0964b67f bccf8a93 332528fa 11e5ab43 2a6226a6 ceb197ab 7f03c061
|
2019-05-01 22:58:51 +00:00
|
|
|
$ bash install.sh
|
2013-04-24 13:20:57 +00:00
|
|
|
|
|
|
|
This will literally install faster than reading the rest of this
|
|
|
|
document.
|
2013-04-21 21:33:02 +00:00
|
|
|
|
|
|
|
|
2012-08-08 19:25:18 +00:00
|
|
|
= Full installation =
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2012-08-08 19:25:18 +00:00
|
|
|
Full installation of GNU Parallel is as simple as:
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2024-12-24 00:22:10 +00:00
|
|
|
wget https://ftpmirror.gnu.org/parallel/parallel-20241222.tar.bz2
|
|
|
|
wget https://ftpmirror.gnu.org/parallel/parallel-20241222.tar.bz2.sig
|
|
|
|
gpg parallel-20241222.tar.bz2.sig
|
|
|
|
bzip2 -dc parallel-20241222.tar.bz2 | tar xvf -
|
|
|
|
cd parallel-20241222
|
2015-06-14 21:43:58 +00:00
|
|
|
./configure && make && sudo make install
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2013-03-12 09:17:55 +00:00
|
|
|
|
|
|
|
= Personal installation =
|
|
|
|
|
2011-12-09 22:25:20 +00:00
|
|
|
If you are not root you can add ~/bin to your path and install in
|
|
|
|
~/bin and ~/share:
|
2010-11-09 17:09:33 +00:00
|
|
|
|
2024-12-24 00:22:10 +00:00
|
|
|
wget https://ftpmirror.gnu.org/parallel/parallel-20241222.tar.bz2
|
|
|
|
wget https://ftpmirror.gnu.org/parallel/parallel-20241222.tar.bz2.sig
|
|
|
|
gpg parallel-20241222.tar.bz2.sig
|
|
|
|
bzip2 -dc parallel-20241222.tar.bz2 | tar xvf -
|
|
|
|
cd parallel-20241222
|
2014-03-21 21:39:54 +00:00
|
|
|
./configure --prefix=$HOME && make && make install
|
2010-11-09 17:09:33 +00:00
|
|
|
|
2011-12-09 22:25:20 +00:00
|
|
|
Or if your system lacks 'make' you can simply copy src/parallel
|
|
|
|
src/sem src/niceload src/sql to a dir in your path.
|
|
|
|
|
2012-08-08 19:25:18 +00:00
|
|
|
|
|
|
|
= Minimal installation =
|
|
|
|
|
|
|
|
If you just need parallel and do not have 'make' installed (maybe the
|
|
|
|
system is old or Microsoft Windows):
|
2011-12-09 22:25:20 +00:00
|
|
|
|
2018-01-22 16:23:23 +00:00
|
|
|
wget https://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
|
2014-03-21 21:39:54 +00:00
|
|
|
chmod 755 parallel
|
|
|
|
cp parallel sem
|
|
|
|
mv parallel sem dir-in-your-$PATH/bin/
|
2012-08-08 19:25:18 +00:00
|
|
|
|
|
|
|
|
2019-11-23 21:14:03 +00:00
|
|
|
= Installation on compute servers =
|
|
|
|
|
|
|
|
If you are developing your script to run on a remote server, that does
|
|
|
|
not have GNU Parallel installed, but you have it installed on you
|
2021-02-17 14:49:47 +00:00
|
|
|
development machine, then you can use `parallel --embed`.
|
2019-11-23 21:14:03 +00:00
|
|
|
|
|
|
|
parallel --embed > newscript.sh
|
|
|
|
|
|
|
|
Just edit the last lines of newscript.sh and copy it to the compute
|
|
|
|
server.
|
|
|
|
|
|
|
|
|
2012-08-08 19:25:18 +00:00
|
|
|
= Test the installation =
|
2011-12-09 22:25:20 +00:00
|
|
|
|
2010-04-26 22:52:13 +00:00
|
|
|
After this you should be able to do:
|
|
|
|
|
2016-03-26 09:35:13 +00:00
|
|
|
parallel -j0 ping -nc 3 ::: qubes-os.org gnu.org freenetproject.org
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2013-01-19 10:22:04 +00:00
|
|
|
This will send 3 ping packets to 3 different hosts in parallel and print
|
|
|
|
the output when they complete.
|
2010-04-26 22:52:13 +00:00
|
|
|
|
2010-07-18 02:17:49 +00:00
|
|
|
Watch the intro video for a quick introduction:
|
2013-09-18 00:00:10 +00:00
|
|
|
https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
|
|
|
|
|
|
|
|
Walk through the tutorial (man parallel_tutorial). You command line
|
2014-03-27 02:02:18 +00:00
|
|
|
will love you for it.
|
2010-07-18 02:17:49 +00:00
|
|
|
|
2014-03-24 14:49:49 +00:00
|
|
|
When using programs that use GNU Parallel to process data for
|
|
|
|
publication please cite:
|
|
|
|
|
2024-12-24 00:22:10 +00:00
|
|
|
Tange, O. (2024, December 22). GNU Parallel 20241222 ('Bashar').
|
|
|
|
Zenodo. https://doi.org/10.5281/zenodo.14550073
|
2014-03-24 14:49:49 +00:00
|
|
|
|
2022-03-09 22:03:26 +00:00
|
|
|
Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free
|
|
|
|
Software Foundation, Inc.
|
2020-08-07 20:20:30 +00:00
|
|
|
|
2010-04-26 22:52:13 +00:00
|
|
|
|
|
|
|
= New versions =
|
|
|
|
|
2019-05-01 22:58:51 +00:00
|
|
|
New versions will be released at: https://ftp.gnu.org/gnu/parallel/
|
|
|
|
|
2017-03-21 21:20:38 +00:00
|
|
|
|
|
|
|
= Dependencies =
|
|
|
|
|
|
|
|
GNU Parallel should work with a normal full Perl installation. However,
|
|
|
|
if you system has split up Perl into multiple packages then these are
|
|
|
|
the important ones:
|
|
|
|
|
|
|
|
opkg install perlbase-getopt perlbase-ipc procps-ng-ps perlbase-mime
|
2021-04-22 16:20:41 +00:00
|
|
|
|
2021-12-26 22:29:28 +00:00
|
|
|
SPDX-FileCopyrightText: 2021-2022 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
|
2021-04-22 16:20:41 +00:00
|
|
|
SPDX-License-Identifier: GPL-3.0-or-later
|