btrc & btrd
[m6w6/btr] / share / btr / btrd.sh
1 #!/bin/bash
2
3 function btrd-start {
4 btrd-cancel
5 DATE=$(date +%Y%m%d%H%M%S)
6 btr-setup
7 btr-run &
8 BTR_WORKER=$!
9 }
10 export -f btrd-start
11
12 function btrd-cancel {
13 if btrd-worker-started
14 then
15 kill $BTR_WORKER
16 wait $BTR_WORKER
17 fi
18 BTR_WORKER=0
19 }
20 export -f btrd-cancel
21
22 function btrd-stop {
23 BTR_DAEMON=false
24 }
25 export -f btrd-stop
26
27 function btrd-ctime {
28 stat -c %y "$1"
29 }
30 export -f btrd-ctime
31
32 function btrd-fsize {
33 local bytes=$(stat -c %s "$1")
34 }
35 export -f btrd-fsize
36
37 function btrd-status {
38 echo "BTR_BUILD='$BTR_BUILD'"
39 echo "BTR_SERVER='$BTR_SERVER'"
40 echo "BTR_PIDFILE='$BTR_PIDFILE'"
41 echo "BTR_LOGFILE='$BTR_LOGFILE'"
42 echo "BTR_COMFILE='$BTR_COMFILE'"
43 }
44 export -f btrd-status
45
46 function btrd-logrotate {
47 local i=1
48 local f="$BTR_LOGFILE"
49
50 if test -e "$f"
51 then
52 while test -e "$f.$i"
53 do
54 i=$((i+1))
55 done
56 mv "$f" "$f.$i"
57 fi
58
59 }
60 export -f btrd-logrotate
61
62 function btrd-worker-started {
63 test "$BTR_WORKER" -gt 1
64 }
65 export -f btrd-worker-started
66
67 function btrd-worker-running {
68 kill -s 0 $BTR_WORKER
69 }
70 export -f btrd-worker-running
71
72 function btrd-worker-reap {
73 wait $BTR_WORKER
74 BTR_WORKER=0
75 }
76 export -f btrd-worker-reap
77
78 function btrd-worker-kill {
79 kill $BTR_WORKER
80 }
81 export -f btrd-worker-kill
82
83 BTR_DAEMON=true
84 BTR_WORKER=0
85 BTR_SERVER=0
86 BTR_PIDFILE="$BTR_RUNDIR/$BTR_BUILD.pid"
87 BTR_LOGFILE="$BTR_RUNDIR/$BTR_BUILD.log"
88 BTR_COMFILE="$BTR_RUNDIR/$BTR_BUILD.socket"
89
90 export BTR_DAEMON BTR_WORKER BTR_SERVER BTR_PIDFILE BTR_LOGFILE BTR_COMFILE
91
92 btrd-logrotate
93
94 exec >"$BTR_LOGFILE" 2>&1
95 echo $$ >"$BTR_PIDFILE"
96
97 ncat -lkU -c btrd-status "$BTR_COMFILE" &
98 BTR_SERVER=$!
99
100 trap btrd-start HUP
101 trap btrd-cancel INT
102 trap btrd-stop TERM
103
104 while $BTR_DAEMON
105 do
106 if btrd-worker-started && btrd-worker-running
107 then
108 btrd-worker-reap
109 else
110 kill -s STOP $$
111 fi
112 done
113
114 btrd-cancel
115
116 if test "$BTR_SERVER" -gt 1
117 then
118 kill $BTR_SERVER
119 wait $BTR_SERVER
120 fi
121
122 test -e "$BTR_PIDFILE" && rm "$BTR_PIDFILE"
123 test -e "$BTR_LOGFILE" && rm "$BTR_LOGFILE"
124 test -S "$BTR_COMFILE" && rm "$BTR_COMFILE"
125
126 # vim: noet