用shell script調用dsjob的實例

轉載自:http://www.blogjava.net/xichengmylove/archive/2007/07/18/130982.html

#!/bin/ksh
#######
################################################################################
#######
####### FILE: MasterControl.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 [ KaTeX parse error: Expected '}', got '#' at position 2: {#̲} -ne 14 ]; the…{NOW} PROG:Invalidparameterlist."echo"{PROG} : Invalid parameter list." echo "{NOW} PROG:Thescriptneeds14parameters:"echo"{PROG} : The script needs 14 parameters:" echo "{NOW} PROG:JobName"echo"{PROG} : JobName" echo "{NOW} PROG:ParameterFile"echo"{PROG} : ParameterFile" echo "{NOW} PROG:FileSetDate(YYYYMMDD)"echo"{PROG} : FileSetDate (YYYY-MM-DD)" echo "{NOW} PROG:BatchNumber"echo"{PROG} : BatchNumber" echo "{NOW} PROG:JobHierarchyFile"echo"{PROG} : JobHierarchyFile" echo "{NOW} PROG:SourceSystemList"echo"{PROG} : SourceSystemList" echo "{NOW} PROG:SubjectAreaList"echo"{PROG} : SubjectAreaList" echo "{NOW} PROG:ClearWorkArea"echo"{PROG} : ClearWorkArea" echo "{NOW} PROG:StartingMilestone"echo"{PROG} : StartingMilestone" echo "{NOW} PROG:EndingMilestone"echo"{PROG} : EndingMilestone" echo "{NOW} PROG:DebugMode"echo"{PROG} : DebugMode" echo "{NOW} PROG:JobLinkStatisticChecksFile"echo"{PROG} : JobLinkStatisticChecksFile" echo "{NOW} PROG:ResurrectLogFile"echo"{PROG} : ResurrectLogFile" echo "{NOW} ${PROG} : ProcessDate (NULL|YYYY-MM-DD H24:MI:SS)"
exit 99
fi

JobName="1"ParameterFile="{1}" ParameterFile="{2}"
FileSetDate="3"BatchNumber="{3}" BatchNumber="{4}"
JobHierarchyFile="5"SourceSystemList="{5}" SourceSystemList="{6}"
SubjectAreaList="7"ClearWorkArea="{7}" ClearWorkArea="{8}"
StartingMilestone="9"EndingMilestone="{9}" EndingMilestone="{10}"
DebugMode="11"JobLinkStatisticChecksFile="{11}" JobLinkStatisticChecksFile="{12}"
ResurrectLogFile="13"ProcessDate="{13}" ProcessDate="{14}"

echo “${NOW} ${PROG} JobName JobName"echo"{JobName}" echo "{NOW} ${PROG} ParameterFile ParameterFile"echo"{ParameterFile}" echo "{NOW} ${PROG} FileSetDate FileSetDate"echo"{FileSetDate}" echo "{NOW} ${PROG} BatchNumber BatchNumber"echo"{BatchNumber}" echo "{NOW} ${PROG} JobHierarchyFile JobHierarchyFile"echo"{JobHierarchyFile}" echo "{NOW} ${PROG} SourceSystemList SourceSystemList"echo"{SourceSystemList}" echo "{NOW} ${PROG} SubjectAreaList SubjectAreaList"echo"{SubjectAreaList}" echo "{NOW} ${PROG} ClearWorkArea ClearWorkArea"echo"{ClearWorkArea}" echo "{NOW} ${PROG} StartingMilestone StartingMilestone"echo"{StartingMilestone}" echo "{NOW} ${PROG} EndingMilestone EndingMilestone"echo"{EndingMilestone}" echo "{NOW} ${PROG} DebugMode DebugMode"echo"{DebugMode}" echo "{NOW} ${PROG} JobLinkStatisticChecksFile JobLinkStatisticChecksFile"echo"{JobLinkStatisticChecksFile}" echo "{NOW} ${PROG} ResurrectLogFile ResurrectLogFile"echo"{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/{CommonLogFileDirectory}/{PROG}_JobName.logTEMPBATCHNBRLOG={JobName}.log TEMPBATCHNBRLOG={TempFileDirectory}/KaTeX parse error: Expected group after '_' at position 7: {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"{UserID}" echo "{NOW} ${PROG} BinFileDirectory BinFileDirectory"echo"{BinFileDirectory}" echo "{NOW} ${PROG} LogFileDirectory LogFileDirectory"echo"{LogFileDirectory}" echo "{NOW} ${PROG} TempFileDirectory TempFileDirectory"echo"{TempFileDirectory}" echo "{NOW} ${PROG} CommonScriptFileDirectory CommonScriptFileDirectory"echo"{CommonScriptFileDirectory}" echo "{NOW} ${PROG} CommonLogFileDirectory CommonLogFileDirectory"echo"{CommonLogFileDirectory}" echo "{NOW} ${PROG} LogFileName LogFileName"echo"{LogFileName}" echo "{NOW} ${PROG} TEMPBATCHNBRLOG TEMPBATCHNBRLOG"echo"{TEMPBATCHNBRLOG}" echo "{NOW} ${PROG} DATASTAGEPROJECT DATASTAGEPROJECT"echo"{DATASTAGEPROJECT}" echo "{NOW} ${PROG} DSSERVER DSSERVER"echo"{DSSERVER}" echo "{NOW} ${PROG} DSUSERID DSUSERID"echo"{DSUSERID}" echo "{NOW} ${PROG} DSPASSWORD Protected
echo

#######
####### PARAMETER BUILD Without batch number ##################################
#######

if [ “ProcessDate"="NULL"];thenStartTimestamp=date+elseStartTimestamp="{ProcessDate}" = "NULL" ]; then StartTimestamp=`date '+%Y-%m-%d %H:%M:%S'` else StartTimestamp="{ProcessDate}”
fi
ParamList=" -param ParameterFile=ParameterFile"ParamList="{ParameterFile}" ParamList="{ParamList} -param ProcessDate="KaTeX parse error: Can't use function '\"' in math mode at position 17: …StartTimestamp}\̲"̲" ParamList="{ParamList} -param FileSetDate=FileSetDate"ParamList="{FileSetDate}" ParamList="{ParamList} -param JobHierarchyFile=JobHierarchyFile"ParamList="{JobHierarchyFile}" ParamList="{ParamList} -param SourceSystemList=SourceSystemList"ParamList="{SourceSystemList}" ParamList="{ParamList} -param SubjectAreaList=SubjectAreaList"ParamList="{SubjectAreaList}" ParamList="{ParamList} -param ClearWorkArea=ClearWorkArea"ParamList="{ClearWorkArea}" ParamList="{ParamList} -param StartingMilestone=StartingMilestone"ParamList="{StartingMilestone}" ParamList="{ParamList} -param EndingMilestone=EndingMilestone"ParamList="{EndingMilestone}" ParamList="{ParamList} -param DebugMode=DebugMode"ParamList="{DebugMode}" ParamList="{ParamList} -param JobLinkStatisticChecksFile=JobLinkStatisticChecksFile"ParamList="{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 KaTeX parse error: Undefined control sequence: \ at position 36: …SN" "IRUserID" \̲ ̲ …{JobName}"
KaTeX parse error: Undefined control sequence: \ at position 19: …artTimestamp}" \̲ ̲ …{UserID}”
KaTeX parse error: Undefined control sequence: \ at position 21: …ceSystemList}" \̲ ̲ …{SubjectAreaList}”
KaTeX parse error: Undefined control sequence: \ at position 14: {ParamList}" \̲ ̲ …{FileSetDate}” > TEMPBATCHNBRLOGSQLEXITSTATUS={TEMPBATCHNBRLOG} SQL_EXIT_STATUS=?
cat TEMPBATCHNBRLOGif["{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"];thenNOW=dateecho"{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="ParamListparamBatchNumber={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 > LogFileNameechoecho"{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=KaTeX parse error: Expected '}', got '#' at position 7: {ERROR#̲#*\(} ERROR={ERROR%%)*}

if [ “${failedstart}” != 0 ]; then
NOW=date
echo ${NOW} PROG"Thejobfailedtostart"AuditStatus="FAILURE"Comments="MasterControlaborted"EXITSTATUS=1elseif["{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} PROGThenumberoffailedjobsis[{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(’KaTeX parse error: Undefined control sequence: \ at position 43: … HH24:MI:SS'), \̲ ̲ …{AuditStatus}’,
A.COMMENTS = ‘KaTeX parse error: Undefined control sequence: \ at position 14: {Comments}', \̲ ̲ …{ParamList}’
WHERE (A.BATCH_NBR = ${BatchNumber});”

NOW=date
echo ${NOW} ${PROG} Audit SQL SQLstringSQLScriptFileName={SQLstring} SQLScriptFileName={TempFileDirectory}/KaTeX parse error: Expected group after '_' at position 7: {PROG}_̲{JobName}_end.sql
echo ${SQLstring} > ${SQLScriptFileName}

${CommonScriptFileDirectory}/comSQLPlus.ksh ${ParameterFile} IRDSN IRUserID SQLScriptFileNameSQLEXITSTATUS={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} PROGComplete,exitingwithstatus[{PROG} Complete, exiting with status [{EXIT_STATUS}]
exit ${EXIT_STATUS}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章