Datastage 調度相關 dsjob


DataStage有他自己的調度,不過個人總覺得修改起來不怎么方便。於是偏向於在Linux下用shell調度。最近項目需要,總結了一些,備忘。有什么不對的地方,歡迎指正。

 

1 dsjob語法

Command Syntax:

dsjob [-authfile <authfile> | -file <file> <domain> <DataStage server> | -domain <domain> -user <user> -password <password> -server <DataStage server>] | -domain <domain> [-user <user>] -server <DataStage server>

<primary command> [<arguments>]

Valid primary command options are:

-run

-stop

-lprojects

-ljobs

-linvocations

-lstages

-llinks

-projectinfo

-jobinfo

-stageinfo

-linkinfo

-lparams

-paraminfo

-log

-logsum

-logdetail

-lognewest

-report

-jobid

-import

Status code = -9999 DSJE_DSJOB_ERROR

2 腳本示例

dsjob所在的目錄為(據實況而定):/mistel/IBM/InformationServer/Server/DSEngine/bin/dsjob

2.1 運行job

運行job,並把日志寫在/DS/DSLogs/目錄下,每天一個新的文件。

dsjob -run -mode NORMAL -jobstatus dstage1 DD_Test >> /DS/DSLogs/job_run_` date +%Y%m%d`.log

2.2 重置job

當job的狀態為“為編譯”,“終止”等時,需要重新編譯才可以運行。

dsjob -run -mode RESET -wait dstage1 DD_Test >> /DS/DSLogs/job_init_` date +%Y%m%d`.log

更多例子(dstage1項目下的 DD_Test job):

dsjob -run -mode NORMAL -jobstatus dstage1 DD_Test >> /DS/DSLogs/job_run_` date +%Y%m%d`.log

dsjob -report dstage1 DD_Test >> /DS/DSLogs/job_run_` date +%Y%m%d`.log

3 問題解決

3.1 dsjob:command not found

執行腳本時,可能出現dsjob命令未找到的錯誤提示,解決辦法有幾種。

3.1.1 解決一

即每次調用dsjob命令前,都把dsenv中的變量讀取一次。命令如下:

source /mistel/IBM/InformationServer/Server/DSEngine/dsenv

3.1.2 解決二

讓Linux每次登錄時自動執行3.1.1中提到的腳本。即在/etc/profile.d/custom.sh中添加這段腳本。

3.2 較完整的腳本

/test/runJob.sh

#!/bin/bash

########################################

#

# runJob.sh 2012-08-19

# run a job with parameters

#

#######################################

# if the number of input parameters is less than 2,then output the help document and exit

if [ $# -lt 2 ] ; then

cat << HELP

runJob --run a job UASGE: runJob projectName jobName jobParameters

EXAMPLE: runJob dsstage1 DD_Test -param startDT=20120819 -param endDT=20120819

HELP

exit 0

fi

projectName="$1"

jobName="$2"

jobParameters="$3"

#echo $projectName

#echo $jobName

#echo $jobParameters

logdir=/DS/DSLogs #directory to store logs

workdate=`date +%Y%m%d`

#logdir processing.If log folder not exists,create folder.

if [ -d $logdir ]; then

echo "$logdir is exist,continue..."

else

echo "$logdir is not exist,creating $logdir..."

mkdir -p $logdir

fi

#job state processing.If job state is not finished ok,then reset the job

jobsta=$($DSHOME/bin/dsjob -jobinfo $projectName $jobName 2>&1 | awk -F: '/^Job Status/{print $2}')

echo $jobsta

if [ "$jobsta" == " RUN FAILED (3)" -o "$jobsta" == " STOPPED (97)" ];then

echo "Reset before run job $jobname"

$DSHOME/bin/dsjob -run -mode RESET $projectName $jobName >>${logdir}/job_init_` date +%Y%m%d`.log

sleep 5

fi

#run a job

dsjob -run -mode NORMAL $jobparameters -jobstatus $projectName $jobName >> /DS/DSLogs/job_run_` date +%Y%m%d`.log


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM