|NQ(1)||General Commands Manual||NQ(1)|
nqutility provides a very lightweight queuing system without requiring setup, maintenance, supervision or any long-running processes.
Job order is enforced by a timestamp
gets immediately when started. Synchronization happens on file-system level.
Timer resolution is milliseconds. No sub-second file system time stamps are
required. Polling is not used. Exclusive execution is maintained
You enqueue(!) new jobs into the queue by running
nq command line ...
The job id (a file name relative to
which defaults to the current directory) is output (unless suppressed using
nq detaches from the
terminal immediately, running the job in the background. Standard output and
standard error are redirected into the job id file. fq(1)
can be used to conveniently watch the log files.
The options are as follows:
- Clean up job id file when process exited with status 0.
- Suppress output of the job id after spawning new job.
- Enter test mode: exit with status 0 when all of the listed job ids are already done, else with status 1.
- Enter waiting mode: wait in the foreground until all listed job ids are done.
nqowns all files in
NQDIR(respectively .) which start with “
,” or “
.,”. These files are created according to the following scheme:
nqutility exits 0 on success, and >0 if an error occurs; unless test mode is used, in which case exit status 1 means there is a job running.
On fatal errors, exit codes 111 and 222 are used.
EXAMPLES¶Build make(1) targets
all, without occupying the terminal:
% nq make clean % nq make depends % nq make all % fq ... look at output, can interrupt with C-c any time without stopping the build ...
Simple download queue, accessible from multiple terminals:
% alias qget='NQDIR=/tmp/downloads nq wget' % alias qwait='NQDIR=/tmp/downloads fq -q' window1% qget http://mymirror/big1.iso window2% qget http://mymirror/big2.iso window3% qget http://mymirror/big3.iso % qwait ... wait for all downloads to finish ...
As nohup(1) replacement (The benchmark will run in background, every run gets a different output file, and the command line you ran is logged too.):
% ssh remote remote% nq ./run-benchmark ,14f6f3034f8.17035 remote% ^D % ssh remote remote% fq ... see output, fq exits when job finished ...
TRICKS¶The "file extension" of the log file is actually the PID of the job.
nqruns all jobs in a separate process group, so you can kill an entire job process tree at once using kill(1) with a negative PID. Before the job is started, it is the PID of
nq, so you can cancel a queued job by killing it as well.
Thanks to the initial
exec line in the log
files, you can resubmit a job by executing it as a shell command file, i.e.
sh job id
nq wrappers setting
NQDIR to provide different queues for different
purposes is encouraged.
INTERNALS¶Enforcing job order works like this:
nqwill only work correctly when:
SEE ALSO¶fq(1), tq(1).
AUTHORS¶Leah Neukirchen <email@example.com>
CAVEATS¶All reliable queue status information is in main memory only, which makes restarting a job queue after a reboot difficult.
nqis in the public domain.
To the extent possible under law, the creator of this work has waived all copyright and related or neighboring rights to this work.
|August 25, 2015||Linux 4.19.0-6-amd64|