initial code repo
[stor4nfv.git] / src / ceph / qa / nightlies / cron_wrapper
diff --git a/src/ceph/qa/nightlies/cron_wrapper b/src/ceph/qa/nightlies/cron_wrapper
new file mode 100755 (executable)
index 0000000..ced5a32
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/bash
+# /nightlies/cron_wrapper.sh
+
+# check for no argument case and stop
+if [ -z $1 ]; then
+  echo "need argument"
+  exit 1
+fi
+
+# set permanent $LOG file var
+LOG="/var/log/crontab-nightlies-log/crontab.log"
+# set $LOG_LOCKED_ERR in case locking failed
+LOG_LOCK_ERR="/var/log/crontab-nightlies-log/crontab_lock_problem.$$"
+
+# temp files to store stdout and stderr
+# named with the PID of this script in their name so they'll be unique
+STDERR="/var/tmp/stderr.$$"
+STDOUT="/var/tmp/stdout.$$"
+
+# $STDOUT and $STDERR are removed when the script exits for any reason
+trap  "rm -f $STDOUT $STDERR" 0
+
+# run a command from this script's argument
+# redirect stdout to $STDOUT file and redirect stderr to $STDERR file
+
+DATE=$(date)
+echo -n "$DATE: "  >> $STDOUT
+echo "Running command: $@" >> $STDOUT
+"$@" > $STDOUT 2> $STDERR
+
+# get return code from the command run
+code=$?
+
+if [ $code != 0 ] ; then
+        # echoing to stdout/stderr makes cron send email
+        echo "stdout:"
+        cat $STDOUT
+        echo "stderr:"
+        cat $STDERR
+else
+        # normal exit: just log stdout
+
+       # lock $LOG with file descriptor 200
+       exec 200>>$LOG
+       # if $LOG is locked by other process - wait for 20 sec
+       flock -w 20 200 || LOG=$LOG_LOCK_ERR
+       echo "stdout:" >> $LOG
+       cat $STDOUT >> $LOG
+       echo "stderr:" >> $LOG
+       cat $STDERR >> $LOG
+       # unlock
+       flock -u 200
+fi