Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
mkqueue.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author mdejong
4#
5script=${0##*/}
6
7# ----------------------------------------------------------------------------------------
8# Simple desktop batch queue processor.
9#
10# The batch queue is defined by a standard FIFO and
11# the entries in the queue are processed line-by-line.
12# Each entry is executed as a separate process in the background,
13# commonly referred to as a job.
14# The number of jobs that can simultaneously run is limited by the queue size.
15# The batch queue can be terminated by submitting a job with contents "exit".
16#
17# The batch queue may also be an existing regular file.
18# The entries in the queue are processed as normal but
19# the batch queue will terminate when the end-of-file is reached.
20#
21# A job can be submitted using the puts_queue function (see qlib.sh or qlib.csh).
22# A series of joint commands can be submitted using a sequence of
23# calls to put_queue, terminated by a single puts_queue call.
24# ----------------------------------------------------------------------------------------
25
26if [ -z $JPP_DIR ]; then
27 echo "Variable JPP_DIR undefined."
28 exit
29fi
30
31source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
32source qlib.sh
33
34set_variable: DEBUG MKQUEUE_DEBUG 3
35set_variable QUEUE_NAME ${TMPDIR:-/tmp}/queue # default name of queue
36set_variable QUEUE_SIZE 1 # default size of queue
37set_variable COMMAND mkqueue.sh
38set_variable SLEEP_TIME 1s # sleep time
39
40if do_usage $*; then
41 print -u2 "$script [queue name [queue size]] <option>"
42 print -u2 "Possible options: start, stop, continue, restart."
43 exit
44fi
45
46case $# in
47 3) set_variable QUEUE_SIZE $argv[2];&
48 2) set_variable QUEUE_NAME $argv[1];&
49 1) set_variable OPTION $argv[-1];;
50 *) fatal "Wrong number of options.";;
51esac
52
53if ( is_CCLyon ); then
54 fatal "This batch queue processor is intended for use on a desktop."
55fi
56
57if (( $QUEUE_SIZE < 1 )); then
58 fatal "Invalid queue size $QUEUE_SIZE."
59fi
60
61if [[ $OPTION != "start" && $OPTION != "stop" && $OPTION != "continue" && $OPTION != "restart" ]]; then
62 fatal "Invalid option $OPTION."
63fi
64
65if [[ $OPTION == "stop" || $OPTION == "restart" ]]; then
66
67 PID=(`get_pid $COMMAND`)
68
69 PID[$PID[(i)$$]]=
70
71 if [[ -n $PID ]]; then
72 notice "Stop $COMMAND."
73 kill -9 $PID
74 fi
75
76 rm -f $QUEUE_NAME # remove FIFO
77
78 OPTION=${OPTION/restart/start}
79
80elif [[ $OPTION == "continue" ]]; then
81
82 PID=(`get_pid $COMMAND`)
83
84 PID[$PID[(i)$$]]=
85
86 if [[ -n $PID ]]; then
87 notice "$script is running with PID(s) $PID"
88 else
89 OPTION=start
90 fi
91
92fi
93
94if [[ $OPTION = "start" ]]; then
95
96 notice "Start batch queue ${QUEUE_NAME} >& ${QUEUE_NAME}_log"
97
98 trap "" HUP # trap hangup
99
100 queue $QUEUE_NAME $QUEUE_SIZE $SLEEP_TIME >& ${QUEUE_NAME}_log &
101
102 while [[ ! -e $QUEUE_NAME ]]; do
103 sleep $SLEEP_TIME
104 done
105
106fi