调度相关,命令_数据库其它_脚本之家

Datastage
的job可以通过dsjob命令来调用job或者获得job的信息,以及运行的报告和日志。
安装DataStage 的目录下 例如C:AscentialDataStageEnginebin>
dsjob的的语法如下: Command Syntax: dsjob [-file | [-server ][-user
][-passwod ]] [] Valid primary command options are: -run 运行job
-stop 停止运行中的job -lprojects 列出server中所有的工程 -ljobs
列出指定project中的所有的job
-linvocations列出指定job中的所有的invocation -lstages
列出指定job中的所有的stage -llinks 列出指定job中的所有的link
-projectinfo 列出指定project的信息 -jobinfo 列出指定job的信息 -stageinfo
列出指定stage的信息 -linkinfo 列出指定link的信息 -lparams
列出指定job的所有的parameter -paraminfo 列出指定parameter的信息 -log
获得job的所有的日志 -logsum 获得job的所有的日志 -logdetail
获得job的所的详细日志 -lognewest -report 获得job的所的详细日志 -jobid
-file的参数找了一下,也没找到什么好的解释,望高手能够解释一下。 -server
datastage 工程名称 -user 用户名称 -password 密码 -primary command -run
Invalid arguments: dsjob -run [-mode ] NORMAL 正常运行 RESET 重置
VALIDATE 验证job是否可行 [-param =] 设置变量值 [-warn ] warn
警告多少条记录以后job停止运行 [-rows ] rows
运行过多少记录以后job停止运行 [-wait] wait 等待多长时间停止运行
[-opmetadata ] [-disableprjhandler] [-disablejobhandler]
[-jobstatus] Jobstatus 运行的状态 [-userstatus] [-useid] 1 dsjob
-server 10.240.12.67 -user peace.zhao -password Yanzhang0717 -run -mode
NORMAL sysup1_MPHASIS_1 Sequential 最简单的运行 2
C:AscentialDataStageEnginebin>dsjob -server 10.240.12.67
-user peace.zhao -password Yanzhang0717 -run -mode NORMAL -jobstatus
sysup1_MPHASIS_1 Sequential Waiting for job… Finished waiting for
job Job Status : Status code = 1 3
C:AscentialDataStageEnginebin>dsjob -server 10.240.12.67
-user peace.zhao -password Yanzhang0717 -run -mode NORMAL -param
input=7.txt -param output=8.txt -j obstatus sysup1_MPHASIS_1
Sequential Waiting for job… Finished waiting for job Job Status :
Status code = 1 -stop Invalid arguments: dsjob -stop [-useid]
停止正在运行的job -lprojects 列出所有的server中的job
C:AscentialDataStageEnginebin>dsjob -server 10.240.12.67
-user peace.zhao -password Yanzhang0717 -lprojects Empty Study
sysup1_MPHASIS sysup1_MPHASIS_1 sysup1_MPHASIS_2 sysup1_MPHASIS_3
tttt up_20090204 yes Status code = 0 -lprojects -ljobs -linvocations
-lstages -llinks -lparams 功能和用法与-lprojects相似 -projectinfo
获得project的信息 C:AscentialDataStageEnginebin>dsjob
-projectinfo sysup1_MPHASIS_1 Host Name : 10.240.12.67 Project Name :
sysup1_MPHASIS_1 Status code = 0 -jobinfo
C:AscentialDataStageEnginebin>dsjob -jobinfo
sysup1_MPHASIS_1 Sequential Job Status : RUN OK Job Controller : not
available Job Start Time : Mon Jul 06 15:04:33 2009 Job Wave Number : 3
User Status : not available Job Control : 0 Interim Status : NOT RUNNING
Invocation ID : not available Last Run Time : Mon Jul 06 15:04:42 2009
Job Process ID : 0 Invocation List : Sequential Status code = 0
-linkinfo -paraminfo 与获得project 和job信息相同 -report
获得job运行的报告 C:AscentialDataStageEnginebin>dsjob –report
Invalid arguments: dsjob -report [-useid] [report type>] report
type = BASIC | DETAIL | XML
C:AscentialDataStageEnginebin>dsjob -report
sysup1_MPHASIS_1 Sequential BASIC
**************************************************
ジョブのステータスレポート: Sequential 作成日时: 2009-07-06 15:26:27
ジョブ开始时刻 = 2009-07-06 15:04:33 ジョブ终了时刻 = 2009-07-06
15:04:42 ジョブ経过时间 = 00:00:09 ジョブステータス = 1 Status code = 0
C:AscentialDataStageEnginebin>dsjob -report
sysup1_MPHASIS_1 Sequential DETAIL
**************************************************
ジョブのステータスレポート: Sequential 作成日时: 2009-07-06 15:27:00
ジョブ开始时刻 = 2009-07-06 15:04:33 ジョブ终了时刻 = 2009-07-06
15:04:42 ジョブ経过时间 = 00:00:09 ジョブステータス = 1 ステージ:
Sequential_File_1.IDENT1、入力行数 7768800 ステージ开始时刻 =
2009-07-06 15:04:36、终了时刻 = 2009-07-06 15:04:41、経 过时间 =
00:00:05 リンク: DSLink2、行数 7768800 リンク: DSLink2、行数 7768800
Status code = 0 C:AscentialDataStageEnginebin>dsjob -report
sysup1_MPHASIS_1 Sequential XML

DataStage有他自己的调度,不过个人总觉得修改起来不怎么方便。于是偏向于在Linux下用shell调度。最近项目需要,总结了一些,备忘。有什么不对的地方,欢迎指正。

Status code = 0 日志的操作 -log 向指定的job中写日志
C:AscentialDataStageEnginebin>dsjob -log Invalid arguments:
dsjob -log [-info | -warn] Log message is read from stdin. -logsum
Invalid arguments: dsjob -logsum [-type ] [-max ] [-useid]
获得运行时job的信息 Max 获得最近的 条记录
C:AscentialDataStageEnginebin>dsjob -logsum -type INFO -max
10 sysup1_MPHAS IS_1 Sequential 40 INFO Mon Jul 06 15:01:34 2009
Sequential..Sequential_File_1: プロジェクト デフォルト NLS マップ
JPN-SJ IS を使用します 41 INFO Mon Jul 06 15:01:34 2009 ステージ
Sequential..Sequential_File_1.IDENT1 の検証を完了しました。 44 INFO
Mon Jul 06 15:04:33 2009 环境変数の设定: 45 INFO Mon Jul 06 15:04:33
2009 Sequential: NLS 国别情报を
JP-JAPANESE,JP-JAPANESE,JP-JAPANESE,JP-JAPANE SE,JP-JAPANESE へ设定 46
INFO Mon Jul 06 15:04:34 2009 Sequential..Sequential_File_1.IDENT1:
DSD.StageRun アクティブ ステージを 开始しています。トレース モード = 0。
47 INFO Mon Jul 06 15:04:34 2009 Sequential..Sequential_File_1.IDENT1:
NLS 国别情报を JP-JAPANESE,JP-JAPA
NESE,JP-JAPANESE,JP-JAPANESE,JP-JAPANESE へ设定 48 INFO Mon Jul 06
15:04:34 2009 Sequential..Sequential_File_0: プロジェクト デフォルト
NLS マップ JPN-SJ IS を使用します 49 INFO Mon Jul 06 15:04:34 2009
Sequential..Sequential_File_1: プロジェクト デフォルト NLS マップ
JPN-SJ IS を使用します 50 INFO Mon Jul 06 15:04:41 2009
Sequential..Sequential_File_1.IDENT1: DSD.StageRun アクティブ
ステージを 终了します。 52 INFO Mon Jul 06 15:32:32 2009 dd Status code
= 0 -logdetail C:AscentialDataStageEnginebin>dsjob -logdetail
Invalid arguments: dsjob -logdetail [-useid] [] first event id
第一个log id last event id 最后一个log id 如果last event
id为空则默认为first event id的详细信息
C:AscentialDataStageEnginebin>dsjob -logdetail
sysup1_MPHASIS_1 Sequential 1 0 11 Event Id: 10 Time : Mon Jul 06
14:38:07 2009 Type : STARTED User : MPHASISORTCpeace.zhao Message :
ジョブ Sequential をリセットしています。 Event Id: 11 Time : Mon Jul 06
14:38:07 2009 Type : INFO User : MPHASISORTCpeace.zhao Message :
ステージ Sequential..Sequential_File_1.IDENT1 をリセットしています。
-lognewest 获得指定日志类型的最后一个log id
C:AscentialDataStageEnginebin>dsjob -lognewest Invalid
arguments: dsjob -lognewest [-useid] [ ] event type = INFO | WARNING
| FATAL | REJECT | STARTED | RESET | BATCH
C:AscentialDataStageEnginebin>dsjob -lognewest
sysup1_MPHASIS_1 Sequential INFO Newest id = 52 Status code = 0

 

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注