SMS学习笔记3 使用SMS

SMS学习笔记3 使用SMS

SMS服务器->suite定义->创建task->将suite提交给sms->运行并用xcdp管理suite
3.1 定义Suite (.def,详情见Section 6)
定义整个任务
3.2 SMS脚本(.sms)
每个task就是一个脚本文件。%是重要标示,行开头代表C风格的预处理命令,变量则用%包围。脚本中用子命令与SMS通信。
最简单的例子
[shell]
%include <head.h>;
echo “I am a test SMS script in %SMSHOME%”
%include <tail.h>;
[/shell]
head.h
[shell]
#!/bin/ksh
set -e # stop the shell on first error
set -u # fail when using an undefined variable
set -x # echo script lines as they are executed
# Defines the three variables that are needed for any
# communication with SMS
export SMS_PROG=%SMS_PROG% # SMS Remote Procedure Call number
export SMSNODE=%SMSNODE% # The name sms that issued this task
export SMSNAME=%SMSNAME% # The name of this current task
export SMSPASS=%SMSPASS% # A unique password
export SMSTRYNO=%SMSTRYNO% # Current try number of the task
# Tell SMS we have stated
# The SMS variable SMSRID will be set to parameter of smsinit
# Here we give the current PID.
smsinit $$
# Defined a error hanlder
ERROR() {
set +e # Clear -e flag, so we don’t fail
smsabort # Notify SMS that something went wrong
trap 0 # Remove the trap
exit 0 # End the script
}
# Trap any calls to exit and errors caught by the -e flag
trap ERROR 0
# Trap any signal that may cause the script to fail
trap ‘{ echo “Killed by a signal”; ERROR ; }’ 1 2 3 4 5 6 7 8 10 12 13 15
[/shell]
tail.h
[shell]smscomplete # Notify SMS of a normal end
trap 0 # Remove all traps
exit 0 # End the shell
[/shell]
各条建议,去看用户手册,省略。
3.3 time critical tasks 定时任务?
late?
3.4 运行远程任务
SMSCMD 每个任务执行SMSCMD中的命令,默认命令
[code]%SMSJOB% 1> %SMSJOBOUT% 2>&1 &[/code]
SMSJOB           SMS job文件,由SMS编译任务脚本后生成
SMSJOBOUT   记录输出结果的文件
执行远程任务就要修改SMSCMD变量,使用UNIX中的rsh命令可以执行远程任务。例如修改成
[code]edit SMSCMD “rsh %HOST% ‘%SMSJOB% >& %SMSJOBOUT%’”[/code]
可以将任务提交给队列系统,例如IBM的LoadLeveler。
停止远程任务,发送信号2。可以使用smskill脚本。参见更多脚本如smsstatus、smsurl。
3.5 跨服务器移动作业包
xcdp中的Special->Plug命令 ,没实践,不知道有何作用。
3.6 调试包定义文件
CDP> play -l test.def 检查并编译def文件
CDP> set debug on 开启调试模式
未实验成功,不知道是啥效果。
3.7 调试SMS脚本文件
3.7.1 SMS脚本文件的位置
SMSSCRIPT  脚本文件的位置,由以下步骤生成:
测试SMSHOME/SUITE/FAMILY/TASK 是否存在
不存在,测试SMSFETCH是否存在
不存在,则测试SMSFILES。逐级测试SMSNAME,从最长路径到最短路径。如
/rmf_2_0/grapes/00/pre_data/ftp4data
/grapes/00/pre_data/ftp4data
/00/pre_data/ftp4data
/pre_data/ftp4data
/ftp4data
例如:
rmf_2_0(suite)中定义
SMSHOME:/u/grape_qu/smsworks/SMSOUT
grapes(family)中定义
SMSFILES : /u/grape_qu/smsworks/SMSOUT
某任务ftp4data的层次如下
SMSNAME: /rmf_2_0/grapes/00/pre_data/ftp4data
根据上面的准则,先测试
/u/grape_qu/smsworks/SMSOUT/rmf_2_0/grapes/00/pre_data/ftp4data.sms
若找到脚本,则以上就是SMSSCRIPT。
3.7.2 SMS job文件生成
sms文件生成job文件,处理SMS的预处理命令(如%include等),并解析SMS变量。XCDP中可以看到脚本中定义的各种变量。
3.7.3 提交工作
任务运行的输出保存在SMSJOBOUT文件中(文本文件),可以用XCDP查看。如下所示:
[shell]

  • export SMS_PROG=314159
  • export SMSNODE=d34n01
  • export SMSNAME=/test/f3/t1
  • export SMSPASS=ELHBLLDr
  • export SMSTRYNO=2
  • smsinit 1847300
    SMS-> active:/test/f3/t1
    SMS-> active:/test/f3
  • trap ERROR 0
  • trap { echo “Killed by a signal”; ERROR ; } 1 2 3 4 5 6 7 8 10 12 13 15
  • n=1
  • [[ 1 -le 5 ]]
    • date
      msg=The date is now Mon Apr 22 09:15:30 GMT 2013
  • smslabel info The date is now Mon Apr 22 09:15:30 GMT 2013
  • sleep 60
  • (( n = 1 + 1 ))
  • [[ 2 -le 5 ]]
    • date
      msg=The date is now Mon Apr 22 09:16:30 GMT 2013
  • smslabel info The date is now Mon Apr 22 09:16:30 GMT 2013
  • sleep 60
  • (( n = 2 + 1 ))
  • [[ 3 -le 5 ]]
    • date
      msg=The date is now Mon Apr 22 09:17:30 GMT 2013
      [/shell]
      最好的方式是手动执行SMSCMD并调试。