轉載自: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} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} {NOW} ${PROG} : ProcessDate (NULL|YYYY-MM-DD H24:MI:SS)"
exit 99
fi
JobName="{2}"
FileSetDate="{4}"
JobHierarchyFile="{6}"
SubjectAreaList="{8}"
StartingMilestone="{10}"
DebugMode="{12}"
ResurrectLogFile="{14}"
echo “${NOW} ${PROG} JobName {NOW} ${PROG} ParameterFile {NOW} ${PROG} FileSetDate {NOW} ${PROG} BatchNumber {NOW} ${PROG} JobHierarchyFile {NOW} ${PROG} SourceSystemList {NOW} ${PROG} SubjectAreaList {NOW} ${PROG} ClearWorkArea {NOW} ${PROG} StartingMilestone {NOW} ${PROG} EndingMilestone {NOW} ${PROG} DebugMode {NOW} ${PROG} JobLinkStatisticChecksFile {NOW} ${PROG} ResurrectLogFile {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={PROG}_{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 {NOW} ${PROG} BinFileDirectory {NOW} ${PROG} LogFileDirectory {NOW} ${PROG} TempFileDirectory {NOW} ${PROG} CommonScriptFileDirectory {NOW} ${PROG} CommonLogFileDirectory {NOW} ${PROG} LogFileName {NOW} ${PROG} TEMPBATCHNBRLOG {NOW} ${PROG} DATASTAGEPROJECT {NOW} ${PROG} DSSERVER {NOW} ${PROG} DSUSERID {NOW} ${PROG} DSPASSWORD Protected”
echo
#######
####### PARAMETER BUILD Without batch number ##################################
#######
if [ “{ProcessDate}”
fi
ParamList=" -param ParameterFile={ParamList} -param ProcessDate="KaTeX parse error: Can't use function '\"' in math mode at position 17: …StartTimestamp}\̲"̲"
ParamList="{ParamList} -param FileSetDate={ParamList} -param JobHierarchyFile={ParamList} -param SourceSystemList={ParamList} -param SubjectAreaList={ParamList} -param ClearWorkArea={ParamList} -param StartingMilestone={ParamList} -param EndingMilestone={ParamList} -param DebugMode={ParamList} -param JobLinkStatisticChecksFile={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}” > ?
cat {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 “{NOW} ${PROG} Failure to retrieve BATCH_NBR from ${TEMPBATCHNBRLOG}”
exit ${SQL_EXIT_STATUS}
fi
####### Add batch number to list of parameters ########
ParamList="{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 > {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} {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} {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 {TempFileDirectory}/KaTeX parse error: Expected group after '_' at position 7: {PROG}_̲{JobName}_end.sql
echo ${SQLstring} > ${SQLScriptFileName}
${CommonScriptFileDirectory}/comSQLPlus.ksh ${ParameterFile} IRDSN IRUserID ?
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} {EXIT_STATUS}]
exit ${EXIT_STATUS}