btrc & btrd
[m6w6/btr] / share / btr / btrd.sh
diff --git a/share/btr/btrd.sh b/share/btr/btrd.sh
new file mode 100755 (executable)
index 0000000..ca9f55c
--- /dev/null
@@ -0,0 +1,126 @@
+#!/bin/bash
+
+function btrd-start {
+       btrd-cancel
+       DATE=$(date +%Y%m%d%H%M%S)
+       btr-setup
+       btr-run &
+       BTR_WORKER=$!
+}
+export -f btrd-start
+
+function btrd-cancel {
+       if btrd-worker-started
+       then
+               kill $BTR_WORKER
+               wait $BTR_WORKER
+       fi
+       BTR_WORKER=0
+}
+export -f btrd-cancel
+
+function btrd-stop {
+       BTR_DAEMON=false
+}
+export -f btrd-stop
+
+function btrd-ctime {
+       stat -c %y "$1"
+}
+export -f btrd-ctime
+
+function btrd-fsize {
+       local bytes=$(stat -c %s "$1")
+}
+export -f btrd-fsize
+
+function btrd-status {
+       echo "BTR_BUILD='$BTR_BUILD'"
+       echo "BTR_SERVER='$BTR_SERVER'"
+       echo "BTR_PIDFILE='$BTR_PIDFILE'"
+       echo "BTR_LOGFILE='$BTR_LOGFILE'"
+       echo "BTR_COMFILE='$BTR_COMFILE'"
+}
+export -f btrd-status
+
+function btrd-logrotate {
+       local i=1
+       local f="$BTR_LOGFILE"
+       
+       if test -e "$f"
+       then
+               while test -e "$f.$i"
+               do 
+                       i=$((i+1))
+               done
+               mv "$f" "$f.$i"
+       fi
+       
+}
+export -f btrd-logrotate
+
+function btrd-worker-started {
+       test "$BTR_WORKER" -gt 1
+}
+export -f btrd-worker-started
+
+function btrd-worker-running {
+       kill -s 0 $BTR_WORKER
+}
+export -f btrd-worker-running
+
+function btrd-worker-reap {
+       wait $BTR_WORKER
+       BTR_WORKER=0
+}
+export -f btrd-worker-reap
+
+function btrd-worker-kill {
+       kill $BTR_WORKER
+}
+export -f btrd-worker-kill
+BTR_DAEMON=true
+BTR_WORKER=0
+BTR_SERVER=0
+BTR_PIDFILE="$BTR_RUNDIR/$BTR_BUILD.pid"
+BTR_LOGFILE="$BTR_RUNDIR/$BTR_BUILD.log"
+BTR_COMFILE="$BTR_RUNDIR/$BTR_BUILD.socket"
+
+export BTR_DAEMON BTR_WORKER BTR_SERVER BTR_PIDFILE BTR_LOGFILE BTR_COMFILE
+
+btrd-logrotate
+
+exec >"$BTR_LOGFILE" 2>&1
+echo $$ >"$BTR_PIDFILE"
+
+ncat -lkU -c btrd-status "$BTR_COMFILE" &
+BTR_SERVER=$!
+
+trap btrd-start HUP
+trap btrd-cancel INT
+trap btrd-stop TERM
+
+while $BTR_DAEMON
+do
+       if btrd-worker-started && btrd-worker-running
+       then
+               btrd-worker-reap
+       else
+               kill -s STOP $$
+       fi
+done
+
+btrd-cancel
+
+if test "$BTR_SERVER" -gt 1
+then
+       kill $BTR_SERVER
+       wait $BTR_SERVER
+fi
+
+test -e "$BTR_PIDFILE" && rm "$BTR_PIDFILE"
+test -e "$BTR_LOGFILE" && rm "$BTR_LOGFILE"
+test -S "$BTR_COMFILE" && rm "$BTR_COMFILE"
+
+# vim: noet