Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
qlib.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3#
4# \author mdejong
5#
6#--------------------------------------------------------------------------------------
7#
8# Utility script for batch queue functions.
9#
10#--------------------------------------------------------------------------------------
11
12
13#
14# Put command(s) in given queue; do not submit job.
15#
16# \param 1 queue name
17# \param 2-N command(s)
18#
19function put_queue()
20{
21 queue_name=$1
22 shift
23
24 echo -n "$*;" >> $queue_name
25}
26
27
28#
29# Put command(s) in given queue and submit job.
30#
31# \param 1 queue name
32# \param 2-N command(s)
33#
34function puts_queue()
35{
36 queue_name=$1
37 shift
38
39 echo "$*" >> $queue_name
40}
41
42
43#
44# Run queue.
45#
46# \param 1 queue name
47# \param 2 queue size
48# \param 3 sleep time [s]
49#
50function queue()
51{
52 queue_name=$1
53 queue_size=$2
54 sleep_time=$3
55
56 if [[ -e $queue_name ]]; then
57
58 if [[ -p $queue_name ]]; then
59 fatal "Queue $queue_name in use."
60 fi
61 else
62
63 mkfifo $queue_name # create a new FIFO
64 fi
65
66 fd=7 # file descriptor
67
68 eval "exec $fd<>$queue_name" # attach file descriptor to FIFO
69
70 while read job <& $fd; do # read job from file descriptor
71
72 if [[ -n $job ]]; then
73
74 if [[ $job = "exit" ]]; then
75 break
76 fi
77
78 notice "submit $job"
79 eval exec $job & # submit job
80
81 # wait for free slot
82
83 while (( ${#jobstates} >= $queue_size )); do
84 sleep $sleep_time
85 done
86 fi
87 done
88
89 rm -f $queue_name # remove FIFO
90}