Created
May 14, 2013 04:42
UNIX Script to execute DataStage job by Kenneth Bland
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/ksh | |
####### | |
################################################################################ | |
####### | |
####### FILE: DSjobMasterControl.ksh | |
####### | |
####### DESCRIPTION: Starts a DataStage MasterControl type job passing | |
####### all runtime parameter values | |
####### | |
####### | |
####### Date Version Developer Description | |
####### ---------- --------- -------------- ------------------------------------ | |
####### 2002-05-15 1.0 Ken Bland Initial release | |
####### 2002-06-27 2.2 Ken Bland FileSetDate/ProcessDate modifications | |
####### 2002-07-10 2.2 Steve Boyce Added ProcessDate as 14th parameter | |
####### 2002-08-16 2.3 Steve Boyce Now calls stored procedure | |
####### GET_NEW_BATCH_NBR in datastage schema | |
####### instead of deriving it and inserting | |
####### here. | |
####### Uses comSQLPlus.ksh and comPLSQL.ksh | |
####### instead of SQLPlusStub.ksh.ksh | |
####### | |
PROG=`basename ${0}` | |
EXIT_STATUS=0 | |
NOW=`date` | |
echo "${NOW} ${PROG} Initialization..." | |
echo | |
####### | |
####### CONFIGURATION ########################################################## | |
####### | |
if [ ${#} -ne 14 ]; then | |
echo "${NOW} ${PROG} : Invalid parameter list." | |
echo "${NOW} ${PROG} : The script needs 14 parameters:" | |
echo "${NOW} ${PROG} : JobName" | |
echo "${NOW} ${PROG} : ParameterFile" | |
echo "${NOW} ${PROG} : FileSetDate (YYYY-MM-DD)" | |
echo "${NOW} ${PROG} : BatchNumber" | |
echo "${NOW} ${PROG} : JobHierarchyFile" | |
echo "${NOW} ${PROG} : SourceSystemList" | |
echo "${NOW} ${PROG} : SubjectAreaList" | |
echo "${NOW} ${PROG} : ClearWorkArea" | |
echo "${NOW} ${PROG} : StartingMilestone" | |
echo "${NOW} ${PROG} : EndingMilestone" | |
echo "${NOW} ${PROG} : DebugMode" | |
echo "${NOW} ${PROG} : JobLinkStatisticChecksFile" | |
echo "${NOW} ${PROG} : ResurrectLogFile" | |
echo "${NOW} ${PROG} : ProcessDate (NULL|YYYY-MM-DD H24:MI:SS)" | |
exit 99 | |
fi | |
JobName="${1}" | |
ParameterFile="${2}" | |
FileSetDate="${3}" | |
BatchNumber="${4}" | |
JobHierarchyFile="${5}" | |
SourceSystemList="${6}" | |
SubjectAreaList="${7}" | |
ClearWorkArea="${8}" | |
StartingMilestone="${9}" | |
EndingMilestone="${10}" | |
DebugMode="${11}" | |
JobLinkStatisticChecksFile="${12}" | |
ResurrectLogFile="${13}" | |
ProcessDate="${14}" | |
echo "${NOW} ${PROG} JobName ${JobName}" | |
echo "${NOW} ${PROG} ParameterFile ${ParameterFile}" | |
echo "${NOW} ${PROG} FileSetDate ${FileSetDate}" | |
echo "${NOW} ${PROG} BatchNumber ${BatchNumber}" | |
echo "${NOW} ${PROG} JobHierarchyFile ${JobHierarchyFile}" | |
echo "${NOW} ${PROG} SourceSystemList ${SourceSystemList}" | |
echo "${NOW} ${PROG} SubjectAreaList ${SubjectAreaList}" | |
echo "${NOW} ${PROG} ClearWorkArea ${ClearWorkArea}" | |
echo "${NOW} ${PROG} StartingMilestone ${StartingMilestone}" | |
echo "${NOW} ${PROG} EndingMilestone ${EndingMilestone}" | |
echo "${NOW} ${PROG} DebugMode ${DebugMode}" | |
echo "${NOW} ${PROG} JobLinkStatisticChecksFile ${JobLinkStatisticChecksFile}" | |
echo "${NOW} ${PROG} ResurrectLogFile ${ResurrectLogFile}" | |
echo "${NOW} ${PROG} ProcessDate ${ProcessDate}" | |
echo | |
# Below will look in the parameters.ini file to determine the directory path each. | |
UserID=`whoami` | |
BinFileDirectory=`cat /.dshome`/bin | |
LogFileDirectory=`grep -w LogFileDirectory ${ParameterFile}|cut -d "=" -f2` | |
TempFileDirectory=`grep -w TempFileDirectory ${ParameterFile}|cut -d "=" -f2` | |
CommonScriptFileDirectory=`grep -w CommonScriptFileDirectory ${ParameterFile}|cut -d "=" -f2` | |
CommonLogFileDirectory=`grep -w CommonLogFileDirectory ${ParameterFile}|cut -d "=" -f2` | |
LogFileName=${CommonLogFileDirectory}/${PROG}_${JobName}.log | |
TEMPBATCHNBRLOG=${TempFileDirectory}/${PROG}_${JobName}_start.log | |
DATASTAGEPROJECT=`grep -w DATASTAGEPROJECT ${ParameterFile}|cut -d "=" -f2` | |
DSSERVER=`grep -w DSSERVER ${ParameterFile}|cut -d "=" -f2` | |
DSUSERID=`grep -w DSUSERID ${ParameterFile}|cut -d "=" -f2` | |
DSPASSWORD=`grep -w DSPASSWORD ${ParameterFile}|cut -d "=" -f2` | |
NOW=`date` | |
echo "${NOW} ${PROG} UserID ${UserID}" | |
echo "${NOW} ${PROG} BinFileDirectory ${BinFileDirectory}" | |
echo "${NOW} ${PROG} LogFileDirectory ${LogFileDirectory}" | |
echo "${NOW} ${PROG} TempFileDirectory ${TempFileDirectory}" | |
echo "${NOW} ${PROG} CommonScriptFileDirectory ${CommonScriptFileDirectory}" | |
echo "${NOW} ${PROG} CommonLogFileDirectory ${CommonLogFileDirectory}" | |
echo "${NOW} ${PROG} LogFileName ${LogFileName}" | |
echo "${NOW} ${PROG} TEMPBATCHNBRLOG ${TEMPBATCHNBRLOG}" | |
echo "${NOW} ${PROG} DATASTAGEPROJECT ${DATASTAGEPROJECT}" | |
echo "${NOW} ${PROG} DSSERVER ${DSSERVER}" | |
echo "${NOW} ${PROG} DSUSERID ${DSUSERID}" | |
echo "${NOW} ${PROG} DSPASSWORD *Protected*" | |
echo | |
####### | |
####### PARAMETER BUILD Without batch number ################################## | |
####### | |
if [ "${ProcessDate}" = "NULL" ]; then | |
StartTimestamp=`date '+%Y-%m-%d %H:%M:%S'` | |
else | |
StartTimestamp="${ProcessDate}" | |
fi | |
ParamList=" -param ParameterFile=${ParameterFile}" | |
ParamList="${ParamList} -param ProcessDate=\"${StartTimestamp}\"" | |
ParamList="${ParamList} -param FileSetDate=${FileSetDate}" | |
ParamList="${ParamList} -param JobHierarchyFile=${JobHierarchyFile}" | |
ParamList="${ParamList} -param SourceSystemList=${SourceSystemList}" | |
ParamList="${ParamList} -param SubjectAreaList=${SubjectAreaList}" | |
ParamList="${ParamList} -param ClearWorkArea=${ClearWorkArea}" | |
ParamList="${ParamList} -param StartingMilestone=${StartingMilestone}" | |
ParamList="${ParamList} -param EndingMilestone=${EndingMilestone}" | |
ParamList="${ParamList} -param DebugMode=${DebugMode}" | |
ParamList="${ParamList} -param JobLinkStatisticChecksFile=${JobLinkStatisticChecksFile}" | |
ParamList="${ParamList} -param ResurrectLogFile=${ResurrectLogFile}" | |
####### | |
####### Get Batch Number and create ETL_BATCH_AUDIT record ##################### | |
####### | |
echo "${NOW} ${PROG} About to get new BATCH_NBR and insert it into ETL_BATCH_AUDIT..." | |
${CommonScriptFileDirectory}/comPLSQL.ksh ${ParameterFile} "IRDSN" "IRUserID" \ | |
GET_NEW_BATCH_NBR \ | |
"${JobName}" \ | |
"${StartTimestamp}" \ | |
"${UserID}" \ | |
"${SourceSystemList}" \ | |
"${SubjectAreaList}" \ | |
"${ParamList}" \ | |
"${FileSetDate}" > ${TEMPBATCHNBRLOG} | |
SQL_EXIT_STATUS=$? | |
cat ${TEMPBATCHNBRLOG} | |
if [ "${SQL_EXIT_STATUS}" != 0 ]; then | |
NOW=`date` | |
echo "${NOW} ${PROG} Failure to connect/insert into ETL_Batch_Audit table!" | |
exit ${SQL_EXIT_STATUS} | |
fi | |
####### | |
####### Get BATCH_NBR from batch number log file ############################## | |
####### | |
BatchNumber=`grep -w BATCH_NBR ${TEMPBATCHNBRLOG}|cut -d "=" -f2` | |
if [ -z "${BatchNumber}" ]; then | |
NOW=`date` | |
echo "${NOW} ${PROG} Failure to retrieve BATCH_NBR from ${TEMPBATCHNBRLOG}" | |
exit ${SQL_EXIT_STATUS} | |
fi | |
####### | |
####### Add batch number to list of parameters ################################# | |
####### | |
ParamList="${ParamList} -param BatchNumber=${BatchNumber}" | |
NOW=`date` | |
echo | |
echo ${NOW} ${PROG} Parameter list: ${ParamList} | |
echo | |
####### | |
####### DataStage EXECUTION #################################################### | |
####### | |
NOW=`date` | |
echo "${NOW} ${PROG} Executing DataStage dsjob program..." | |
echo ${BinFileDirectory}/dsjob -server ${DSSERVER} -user ${DSUSERID} -password ${DSPASSWORD} -run -wait ${ParamList} ${DATASTAGEPROJECT} ${JobName} 2>&1 > ${LogFileName} | |
echo | |
echo "${BinFileDirectory}/dsjob -server ${DSSERVER} -user ${DSUSERID} -password ${DSPASSWORD} -run -wait ${ParamList} ${DATASTAGEPROJECT} ${JobName} 2>&1 > ${LogFileName}" | |
echo | |
eval ${BinFileDirectory}/dsjob -server ${DSSERVER} -user ${DSUSERID} -password ${DSPASSWORD} -run -wait ${ParamList} ${DATASTAGEPROJECT} ${JobName} 2>&1 >> ${LogFileName} | |
jobwaiting=`grep "Waiting for job..." ${LogFileName}` | |
if [ "${jobwaiting}" != "Waiting for job..." ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} "DataStage failed to start the job" | |
failedstart=1 | |
else | |
NOW=`date` | |
echo ${NOW} ${PROG} "DataStage successfully started the job" | |
failedstart=0 | |
fi | |
NOW=`date` | |
echo ${NOW} ${PROG} "Retrieving job information" | |
${BinFileDirectory}/dsjob -server ${DSSERVER} -user ${DSUSERID} -password ${DSPASSWORD} -jobinfo ${DATASTAGEPROJECT} ${JobName} >> ${LogFileName} | |
####### | |
####### CHECK STATUS ########################################################### | |
####### | |
ERROR=`grep "Job Status" ${LogFileName}` | |
ERROR=${ERROR##*\(} | |
ERROR=${ERROR%%\)*} | |
if [ "${failedstart}" != 0 ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} "The job failed to start" | |
AuditStatus="FAILURE" | |
Comments="MasterControl aborted" | |
EXIT_STATUS=1 | |
else | |
if [ "${ERROR}" = 1 -o "${ERROR}" = 2 ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} "The job completed successfully" | |
AuditStatus="SUCCESS" | |
Comments="" | |
EXIT_STATUS=0 | |
else | |
NOW=`date` | |
echo ${NOW} ${PROG} "The job aborted" | |
AuditStatus="FAILURE" | |
Comments="MasterControl aborted" | |
EXIT_STATUS=1 | |
fi | |
fi | |
FailedJobCount=`grep -i FAILED ${LogFileDirectory}/${JobName}.log|wc -l|cut -b1-9` | |
FailedJobCount=`expr ${FailedJobCount} + 0` | |
echo ${NOW} ${PROG} The number of failed jobs is [${FailedJobCount}] | |
if [ "${FailedJobCount}" != 0 ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} "The job had failed processes" | |
AuditStatus="FAILURE" | |
Comments="MasterControl had ${FailedJobCount} failed processes" | |
EXIT_STATUS=1 | |
fi | |
StoppedJobStreamCount=`grep "JOB STREAM STOPPED" ${LogFileDirectory}/${JobName}.his|wc -l|cut -b1-9` | |
StoppedJobStreamCount=`expr ${StoppedJobStreamCount} + 0` | |
if [ "${StoppedJobStreamCount}" != 0 ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} "The job stream was STOPped or KILLed" | |
AuditStatus="FAILURE" | |
Comments="MasterControl job stream was STOPped or KILLed" | |
EXIT_STATUS=1 | |
fi | |
####### | |
####### AUDIT ################################################################## | |
####### | |
echo | |
echo "${NOW} ${PROG} About to update ETL_BATCH_AUDIT with status information..." | |
EndTimestamp=`date '+%Y-%m-%d %H:%M:%S'` | |
SQLstring="UPDATE ETL_BATCH_AUDIT A \ | |
SET A.END_TIMESTAMP = TO_DATE('${EndTimestamp}','YYYY-MM-DD HH24:MI:SS'), \ | |
A.STATUS = '${AuditStatus}', \ | |
A.COMMENTS = '${Comments}', \ | |
A.RUNTIMESETTINGS = '${ParamList}' \ | |
WHERE (A.BATCH_NBR = ${BatchNumber});" | |
NOW=`date` | |
echo ${NOW} ${PROG} Audit SQL ${SQLstring} | |
SQLScriptFileName=${TempFileDirectory}/${PROG}_${JobName}_end.sql | |
echo ${SQLstring} > ${SQLScriptFileName} | |
${CommonScriptFileDirectory}/comSQLPlus.ksh ${ParameterFile} IRDSN IRUserID ${SQLScriptFileName} | |
SQL_EXIT_STATUS=$? | |
if [ "${SQL_EXIT_STATUS}" != 0 ]; then | |
NOW=`date` | |
echo ${NOW} ${PROG} Failure to connect/update into ETL_Batch_Audit table! | |
exit ${SQL_EXIT_STATUS} | |
fi | |
####### | |
####### EXIT ################################################################### | |
####### | |
NOW=`date` | |
echo ${NOW} ${PROG} Complete, exiting with status [${EXIT_STATUS}] | |
exit ${EXIT_STATUS} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment