|
mkAtJob_k93
We have expert shell programmers currently available to assist your
organization with complex shell scripting projects. We have developed
business continuity, disaster recovery, high availability and
virtualization systems entirely in shell scripts and we have the advanced
technical skills to solve your problems as well. Please
Contact Us for more information.
#!/usr/bin/ksh93
################################################################
function usagemsg_mkAtJob {
print "
Program: mkAtJob
Description: Schedule a command to run sometime in the future via an
\"at\" job, by adding a specified number of days, hours, and/or minutes to
the current date/time.
Usage: ${1##*/} [-?vV] [-N] | [-t YYYYMMDDHHMM] | [ [-n #Secs|-s YYYYMMDDHHMM]
[-D DAYS] [-H HOURS] [-M MINUTES] ]
[-j] -c \"Command\"
Where:
-v = Verbose mode
-V = Very Verbose Mode
-D DAYS = Number of days from NOW to run the \"at\" job
(Default:1)
-H HOURS = Number of hours from NOW to run the \"at\" job
(Default:0)
-M MINUTES = Number of minutes from NOW to run the \"at\" job
(Default:0)
-n NOW = Number of Seconds since the epoch to use as the \"NOW\" date/time.
(Default:NOW)
-s YYYYMMDDHHMM = Date and time to use as the \"NOW\" date/time.
(Default:None)
-t YYYYMMDDHHMM = Run the \"at\" job at the specified date and time.
(Default:None)
-N = Run the \"at\" job using the keyword \"now\" as the time to run the Job.
-j = Print the \"at\" job number on STDOUT after scheduling command
-c Command = A unix command to schedule to run thru \"at\" job scheduler.
Example Usage:
mkAtJob -D 2 -H 6 -M 30 -c \"cat /etc/passwd > /tmp/passwd.out\"
mkAtJob -s 201309091103 -D 2 -c \"cat /etc/passwd > /tmp/passwd.out\"
mkAtJob -t 201309091103 -c \"cat /etc/passwd > /tmp/passwd.out\"
Author: Dana French (dfrench@mtxia.com) Copyright 2013
\"AutoContent\" enabled
"
}
################################################################
#### Program: mkAtJob
####
#### Description:
####
#### Author: Dana French (dfrench@mtxia.com)
####
#### Date: 09/11/2013
####
################################################################
function mkAtJob {
typeset TRUE="0"
typeset FALSE="1"
typeset VERBOSE="${FALSE}"
typeset VERYVERB="${FALSE}"
typeset MKAT_CMD=""
typeset MKAT_DAY="0"
typeset MKAT_HRS="0"
typeset MKAT_MIN="0"
typeset MKAT_ADD="0"
typeset MKAT_SEC="0"
typeset MKAT_NOW=$( printf "%(%s)T\n" )
typeset MKAT_TIM="${MKAT_NOW}"
typeset MKAT_DTM="${MKAT_NOW}"
typeset MKAT_NUM="${FALSE}"
typeset MKAT_KEY="${FALSE}"
typeset MKAT_TKY="${FALSE}"
while getopts ":vVD#H#M#c:n:s:t:jN" OPTION
do
case "${OPTION}" in
'D') MKAT_DAY="${OPTARG}";;
'H') MKAT_HRS="${OPTARG}";;
'M') MKAT_MIN="${OPTARG}";;
'n') MKAT_NOW="${OPTARG}";;
's') MKAT_NOW=$( printf "%(%s)T\n" ${OPTARG} );;
't') MKAT_NOW=$( printf "%(%s)T\n" ${OPTARG} )
MKAT_TKY="${TRUE}";;
'c') MKAT_CMD="${OPTARG}";;
'j') MKAT_NUM="${TRUE}";;
'N') MKAT_KEY="${TRUE}";;
'v') VERBOSE="${TRUE}";;
'V') VERYVERB="${TRUE}";;
'?') usagemsg_mkAtJob && return 1;;
esac
done
shift $(( ${OPTIND} - 1 ))
################################################################
trap "usagemsg_mkAtJob ${0}" EXIT
if (( MKAT_NOW < MKAT_TIM ))
then
print -u 2 -- "# ERROR: The date/time specified is in the past."
print -u 2 -- "# ERROR: Please specify a date/time in the future."
return 2
fi
if [[ "_${MKAT_CMD}" == "_" ]]
then
print -u 2 -- "# ERROR: Command to schedule as \"at\" job not specified."
return 3
fi
trap "-" EXIT
################################################################
(( VERYVERB == TRUE )) && VERBOSE="${TRUE}"
(( VERBOSE == TRUE )) && print -u 2 -- "###################################"
(( VERYVERB == TRUE )) && set -x
################################################################
if (( MKAT_KEY == TRUE ))
then
MKAT_TIM="now"
elif (( MKAT_TKY == TRUE ))
then
MKAT_TIM=$( printf "%(%Y%m%d%H%M)T\n" "#${MKAT_NOW}" )
MKAT_TIM="-t ${MKAT_TIM}"
else
(( VERBOSE == TRUE )) && print -u 2 -- "# Current Seconds: ${MKAT_TIM}"
(( VERBOSE == TRUE )) && print -u 2 -- "# Now Seconds....: ${MKAT_NOW}"
(( MKAT_ADD = ( MKAT_DAY * 24 * 60 * 60 ) + ( MKAT_HRS * 60 * 60 ) + ( MKAT_MIN * 60 ) ))
(( VERBOSE == TRUE )) && print -u 2 -- "# Seconds to add.: ${MKAT_ADD}"
(( MKAT_SEC = MKAT_NOW + MKAT_ADD ))
(( VERBOSE == TRUE )) && print -u 2 -- "# Future Time....: ${MKAT_SEC}"
MKAT_TIM=$( printf "%(%Y%m%d%H%M)T\n" "#${MKAT_SEC}" )
MKAT_TIM="-t ${MKAT_TIM}"
fi
(( VERBOSE == TRUE )) && print -u 2 -- "# Job Time.......: ${MKAT_TIM}"
(( VERBOSE == TRUE )) && print -u 2 -r -- "# print -r -- \"${MKAT_CMD}\" | at ${MKAT_TIM}"
if MKAT_OUT=$( print -r -- "${MKAT_CMD}" | at ${MKAT_TIM} 2>&1 )
then
if (( MKAT_NUM == TRUE ))
then
MKAT_JOB="${MKAT_OUT#* }"
MKAT_JOB="${MKAT_JOB%% *}"
(( VERBOSE == TRUE )) && print -u 2 -- "# Job Number.....: ${MKAT_JOB}"
print -- ${MKAT_JOB}
else
(( VERBOSE == TRUE )) && print -u 2 -- "# Job Results....: ${MKAT_OUT}"
print -- ${MKAT_OUT}
fi
fi
return 0
}
################################################################
################################################################
################################################################
mkAtJob "${@}"
|
|
|