|
@@ -4,16 +4,15 @@ NAME=""
|
|
COMMAND_FILE=""
|
|
COMMAND_FILE=""
|
|
ENV_FILE=""
|
|
ENV_FILE=""
|
|
MAIL_NOTIFICATION=""
|
|
MAIL_NOTIFICATION=""
|
|
-NOTIFICATION_SCRIPT=""
|
|
|
|
PID=$$
|
|
PID=$$
|
|
|
|
|
|
-USAGE="Usage: `basename $0` [-h] [-n name] [-e env-file] [-m mail-address] [-N notifier]"
|
|
|
|
|
|
+USAGE="Usage: `basename $0` [-h] [-n name] [-e env-file] [-m mail-address] COMMAND+"
|
|
|
|
|
|
while getopts hn:e:m:N: OPT; do
|
|
while getopts hn:e:m:N: OPT; do
|
|
case "$OPT" in
|
|
case "$OPT" in
|
|
h)
|
|
h)
|
|
echo $USAGE
|
|
echo $USAGE
|
|
- exit 0
|
|
|
|
|
|
+ exit 1
|
|
;;
|
|
;;
|
|
n)
|
|
n)
|
|
NAME=$OPTARG
|
|
NAME=$OPTARG
|
|
@@ -24,12 +23,84 @@ while getopts hn:e:m:N: OPT; do
|
|
m)
|
|
m)
|
|
MAIL_NOTIFICATION=$OPTARG
|
|
MAIL_NOTIFICATION=$OPTARG
|
|
;;
|
|
;;
|
|
- N)
|
|
|
|
- NOTIFICATION_SCRIPT=$OPTARG
|
|
|
|
- ;;
|
|
|
|
\?)
|
|
\?)
|
|
echo $USAGE >&2
|
|
echo $USAGE >&2
|
|
exit 1
|
|
exit 1
|
|
;;
|
|
;;
|
|
esac
|
|
esac
|
|
done
|
|
done
|
|
|
|
+
|
|
|
|
+shift $((OPTIND - 1))
|
|
|
|
+
|
|
|
|
+if [ -z "${NAME}" ] ; then
|
|
|
|
+ echo "A job name is required." >&2
|
|
|
|
+ exit 1
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+RUN_SCRIPT=$(mktemp)
|
|
|
|
+
|
|
|
|
+cat <<EOF > "${RUN_SCRIPT}"
|
|
|
|
+#!/bin/sh
|
|
|
|
+
|
|
|
|
+FN="${RUN_SCRIPT}"
|
|
|
|
+JOB_NAME="${NAME}"
|
|
|
|
+MAIL_NOTIFICATION="${MAIL_NOTIFICATION}"
|
|
|
|
+
|
|
|
|
+OUTPUT_FILE=\$(mktemp)
|
|
|
|
+TIME_FILE=\$(mktemp)
|
|
|
|
+START_TIME=\$(date)
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+if [ -e "${ENV_FILE}" ] ; then
|
|
|
|
+ cat "${ENV_FILE}" >> "${RUN_SCRIPT}"
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+cat <<EOF >> "${RUN_SCRIPT}"
|
|
|
|
+
|
|
|
|
+env time -o \${TIME_FILE} $@ 2>&1 | tee \${OUTPUT_FILE}
|
|
|
|
+
|
|
|
|
+cat \${TIME_FILE}
|
|
|
|
+
|
|
|
|
+END_TIME=\$(date)
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+if [ ! -z "${MAIL_NOTIFICATION}" ] ; then
|
|
|
|
+ cat <<EOF >> "${RUN_SCRIPT}"
|
|
|
|
+
|
|
|
|
+MESSAGE_FILE=\$(mktemp)
|
|
|
|
+
|
|
|
|
+cat <<EOM > "\${MESSAGE_FILE}"
|
|
|
|
+Job \${JOB_NAME} has completed. The output is attached.
|
|
|
|
+
|
|
|
|
+Start time: \${START_TIME}
|
|
|
|
+End time : \${END_TIME}
|
|
|
|
+
|
|
|
|
+Process Time/Usage Statistics:
|
|
|
|
+EOM
|
|
|
|
+
|
|
|
|
+cat "\${TIME_FILE}" >> "\${MESSAGE_FILE}"
|
|
|
|
+
|
|
|
|
+cat <<EOM >> "\${MESSAGE_FILE}"
|
|
|
|
+
|
|
|
|
+FN="${RUN_SCRIPT}"
|
|
|
|
+JOB_NAME="${NAME}"
|
|
|
|
+MAIL_NOTIFICATION="${MAIL_NOTIFICATION}"
|
|
|
|
+ENV_FILE="${ENV_FILE}"
|
|
|
|
+EOM
|
|
|
|
+
|
|
|
|
+mail -s "Job \${JOB_NAME} complete" -a "\${OUTPUT_FILE}" "\${MAIL_NOTIFICATION}" < "\${MESSAGE_FILE}"
|
|
|
|
+
|
|
|
|
+rm "\${MESSAGE_FILE}"
|
|
|
|
+EOF
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+cat <<EOF >> "${RUN_SCRIPT}"
|
|
|
|
+rm "\${OUTPUT_FILE}"
|
|
|
|
+rm "\${TIME_FILE}"
|
|
|
|
+rm "\${FN}"
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+screen -d -S ${NAME} -m ${RUN_SCRIPT}
|
|
|
|
+
|