【问题标题】:shell script to execute multiple informatica work flows用于执行多个 informatica 工作流的 shell 脚本
【发布时间】:2013-04-29 04:03:10
【问题描述】:

我对 shell 脚本和 UNIX 比较陌生。我正在使用 Solaris 盒子,问题是 我们有一个名为 strtwrfl.sh 的 shell 脚本,它接受一个参数作为工作流名称并启动工作流,例如./strtwrfl.sh ABC 其中ABC 是工作流名称。

我必须运行 200 多个这样的工作流,每个工作流都依赖于前一个工作流的成功完成,即如果有 2 个工作流ABCBCDstrtwrfl.sh BCD 只有在@987654327 时才会成功@成功执行。

每个工作流成功执行所需的时间不同。

我必须编写一个 shell 脚本,这样 200 多个 informatica 工作流必须(我不介意将这些工作流手动输入脚本)一个接一个地执行,如果一个失败,脚本应该停止显示哪个工作流失败。

由于这是一个生产环境,我将无法在此处分享strtwrfl.sh

【问题讨论】:

    标签: shell solaris informatica


    【解决方案1】:

    我不确定我是否正确理解了您的问题,但如果您只想使用不同的参数连续多次调用脚本并在执行失败时终止,您可以执行以下操作:

    meta_strtwrfl.sh:

    #!/bin/sh
    
    script="./strtwrt.sh"
    workflows="
            ABC
            BCD
            CDE
    "
    
    for workflow in ${workflows}; do
            "${script}" "${workflow}" || { echo "$0: workflow '${workflow}' failed!"; exit 1; }
    done
    echo "$0: all workflows finished successfully!"
    

    更改script="./strtwrt.sh" 以反映strtwrt.sh 脚本的路径并相应地更改workflows。我不知道您的 solaris 系统上有哪个标准 shell,所以我们不使用数组作为 workflow 变量,这意味着您的工作流名称不能以这种方式包含空格。

    示例运行:

    $ ./meta_strtwrfl.sh
    ./meta_strtwrfl.sh: all workflows finished successfully!
    
    $ ./meta_strtwrfl.sh
    ./meta_strtwrfl.sh: workflow 'ABC' failed!
    

    【讨论】:

    • 嗨,伙计,谢谢……这段代码可以正常工作,但它不会等到工作流中的所有任务都执行完……我尝试过类似的方法。我在 informatica 目录本身中发现了另一个有趣的脚本,它是 runmaps.sh,它解决了我的问题。它需要一个 .dat 文件作为我们列出所有工作流的参数。
    • 我不知道您所说的“不会等到工作流中的所有任务都执行完毕”是什么意思——您的工作流脚本是按顺序启动的。但是,如果您对问题有(不同的)解决方案,您可以添加并接受自己的答案,这样这个问题就不会一直悬而未决。
    【解决方案2】:

    这不应该很简单吗...在一行中输入这些条目中的每一个..一个接一个..

    ./strtwrfl.sh ABC ./strtwrfl.sh ABC1 ./strtwrfl.sh ABC2 .. .. ..

    等等..

    那将是赤裸裸的骨头..

    然后您可以通过错误处理来即兴发挥。

    或者你想实现一些不同的东西吗?我无法从问题描述中找到?

    【讨论】:

      【解决方案3】:
      <<'notrequired'               
                  wfrunid=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE} ${workflow_name} | grep "Workflow run id" | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
                              cur_wf_status=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE} ${workflow_name} | grep "Workflow run status" | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
      
                              if [ "${cur_wf_status}" == "Suspended" ] 
                                  then
                                      echo "Workflow $workflow_name  Status :${cur_wf_status}"  
                                      echo "Workflow $workflow_name Runid :${wfrunid}"  
                                      echo "                                              " 
                                      echo "######################################## Running workflow in Re-START mode start ################################" 
                                      echo "#################################################################################################################" 
                                      echo "#################################################################################################################" 
      
      
                                      pmcmd recoverworkflow -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -paramfile ${param_file} -rin ${RUN_INSTANCE} -wfrunid ${wfrunid} ${workflow_name} 
      
                                      if [ $?  -ne  0 ]
                                          then 
                                                 echo "################################################# END OF LOG ####################################################" 
                                                 exit 1
                                      fi                                          
                                      while (true)
                                          do
                                              rec_wf_status=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE} ${workflow_name} | grep "Workflow run status" | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
      
                                              rec_wf_log_name=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE}  ${workflow_name} | grep "Workflow log file" | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
      
                                              case "${rec_wf_status}" in
                                              ("Suspended"|"Failed"|"Aborted"|"Stopped") sleep 10
      
                                              rec_wf_error_start=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE}  ${workflow_name} | sed -n '/Workflow run error message: /=' | sed -n '$p' 2> /dev/null`
      
                                              rec_w_error_end=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -usd ${USD} -u ${USER_NAME} -p ${PASSWORD} -f ${folder_name} -rin ${RUN_INSTANCE} ${workflow_name} | sed -n '/Start time: /=' | sed -n '$p' 2> /dev/null`
      
                                              rec_wf_error_end=`expr $rec_w_error_end - 1 2>/dev/null`
      
                                              rec_wf_error=`pmcmd getworkflowdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -usd ${USD} -u ${USER_NAME} -p ${PASSWORD} -f ${folder_name} -rin ${RUN_INSTANCE} ${workflow_name} | sed -n "$rec_wf_error_start,$rec_wf_error_end p" 2> /dev/null`
      
      
      
      
      
                              rec_task_name=`echo ${wf_error} | sed 's/\(^.*task instance\)\(.*\)\(].*$\)/\2/' | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
      
                                              rec_task_type=`pmcmd gettaskdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -u ${USER_NAME} -p ${PASSWORD} -usd ${USD} -f ${folder_name} -rin ${RUN_INSTANCE} -w ${workflow_name} ${rec_task_name} | grep "Task type:" | awk -F"[" '{print $2}' | awk -F"]" '{print $1}'`
      
                                              rec_task_error_start=`pmcmd gettaskdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -usd ${USD} -u ${USER_NAME} -p ${PASSWORD} -f ${folder_name} -rin ${RUN_INSTANCE} -w ${workflow_name} ${rec_task_name} | sed -n '/Task run error message: /=' | sed -n '$p' 2>/dev/null` 
      
                                              rec_error_end=`pmcmd gettaskdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -usd ${USD} -u ${USER_NAME} -p ${PASSWORD} -f ${folder_name} -rin ${RUN_INSTANCE} -w ${workflow_name} ${rec_task_name} | sed -n '/Integration Service: /=' | sed -n '$p' 2>/dev/null`
      
                                              rec_task_error_end=`expr $rec_error_end - 1 2> /dev/null`
      
                                              rec_task_error=`pmcmd gettaskdetails -sv ${INTEG_SERVICE} -d ${DOMAIN} -usd ${USD} -u ${USER_NAME} -p ${PASSWORD} -f ${folder_name} -rin ${RUN_INSTANCE} -w ${workflow_name} ${rec_task_name} | sed -n "${rec_task_error_start},${rec_task_error_end} p" 2> /dev/null`
      
                                              print_error=`echo "Task ${rec_task_name} Failed"`
      
                                              case "${rec_task_type}" in
                                                ("Session") print_error=`echo "${rec_task_name} ${rec_task_error}"`
                                                esac
                                               esac 
      
                                              case "$rec_wf_status" in 
                                              "Suspended") echo "                     " 
                                                     echo "Workflow Status  : ${rec_wf_status}"  
                                                     echo "                     " 
                                                     echo "################################################ WORKFLOW ERROR #################################################" 
                                                     echo "                     " 
                                                     echo "WORKFLOW ${rec_wf_error}" 
                                                     echo "                     " 
                                                     echo "################################################# TASK ERROR ####################################################" 
                                                     echo "                     " 
                                                     echo "Task Type: ${rec_task_type}" 
                                                     echo "                     " 
                                                     echo "${print_error}" 
                                                     echo "                     " 
                                                     execution_stop_time=`date "+%d-%m-%Y-%T"`
                                                     echo "Execution Stop Time : $execution_stop_time" 
                                                     echo "                     " 
                                                     echo "################################################# END OF LOG ####################################################" 
                                                     exit 1
                                                     ;;
                                              "Succeeded") echo "                     " 
                                                     echo "Workflow Status  : ${rec_wf_status}"  
                                                     echo "                     " 
                                                     echo "Workflow Run Successfully Completed"  
                                                     echo "                     " 
                                                     execution_stop_time=`date "+%d-%m-%Y-%T"`
                                                     echo "Execution Stop Time : $execution_stop_time" 
                                                     echo "                     " 
                                                     echo "################################################# END OF LOG ####################################################" 
                                                     exit 0
                                                     ;;
                                              "Aborted") echo "                     "   
                                                     echo "Workflow Status  : ${rec_wf_status}"  
                                                     echo "                     " 
                                                     echo "################################################ WORKFLOW ERROR #################################################" 
                                                     echo "                     " 
                                                     echo "WORKFLOW ${rec_wf_error}" 
                                                     echo "                     " 
                                                     echo "################################################# TASK ERROR ####################################################" 
                                                     echo "Task Type: ${rec_task_type}" 
                                                     echo "                     " 
                                                     echo "                     " 
                                                     echo "${print_error}" 
                                                     echo "                     " 
                                                     execution_stop_time=`date "+%d-%m-%Y-%T"`
                                                     echo "Execution Stop Time : $execution_stop_time" 
                                                     echo "                     " 
                                                     echo "################################################# END OF LOG ####################################################" 
                                                     exit 1
                                                     ;;
                                              "Failed") echo "                     "  
                                                     echo "Workflow Status  : ${rec_wf_status}"  
                                                     echo "                     " 
                                                     echo "################################################ WORKFLOW ERROR #################################################" 
                                                     echo "                     " 
                                                     echo "WORKFLOW ${rec_wf_error}" 
                                                     echo "                     " 
                                                     echo "################################################# TASK ERROR ####################################################" 
                                                     echo "Task Type: ${rec_task_type}" 
                                                     echo "                     " 
                                                     echo "                     " 
                                                     echo "${print_error}" 
                                                     echo "                     " 
                                                     execution_stop_time=`date "+%d-%m-%Y-%T"`
                                                     echo "Execution Stop Time : $execution_stop_time" 
                                                     echo "                     " 
                                                     echo "################################################# END OF LOG ####################################################" 
                                                     exit 1
                                                     ;;
                                              "Stopped") echo "                     "   
                                                     echo "Workflow Status  : ${rec_wf_status}"  
                                                     echo "                     " 
                                                     echo "################################################ WORKFLOW ERROR #################################################" 
                                                     echo "                     " 
                                                     echo "WORKFLOW ${rec_wf_error}" 
                                                     echo "                     " 
                                                     echo "################################################# TASK ERROR ####################################################" 
                                                     echo "Task Type: ${rec_task_type}" 
                                                     echo "                     " 
                                                     echo "                     " 
                                                     echo "${print_error}" 
                                                     echo "                     " 
                                                     execution_stop_time=`date "+%d-%m-%Y-%T"`
                                                     echo "Execution Stop Time : $execution_stop_time" 
                                                     echo "                     " 
                                                     echo "################################################# END OF LOG ####################################################" 
                                                     exit 1
                                                     ;;          
                                              esac
      
                                          done    
      
                              else
      notrequired
      

      【讨论】:

      • edit 提供更多信息。不鼓励使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。我们在这里努力成为知识的资源。
      猜你喜欢
      • 2019-12-29
      • 2016-04-17
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多