首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sos柏林调度程序--作业链--如何在作业超时后触发其他作业

sos柏林调度程序--作业链--如何在作业超时后触发其他作业
EN

Stack Overflow用户
提问于 2017-07-28 05:45:10
回答 1查看 1.3K关注 0票数 1

我正在使用sos柏林调度程序(Linuxx641.10.5版本)。

通常,当作业在job_chain超时时,调度程序会杀死作业进程并发送电子邮件。因此,基于这个,我想触发其他的工作。但是,我试过两种方法

Way 1:

在作业中添加一个函数“spooler_task_after()”。

我猜失败是因为这个作业将在linux系统上创建一个进程,而作业超时调度程序则会杀死这个作业进程,同时也会关闭“spooler_task_after()”函数。

代码:

代码语言:javascript
复制
<job timeout="00:00:09">
    <script language="shell"><![CDATA[

    echo aa
    sleep 10s
    echo bb

    ]]></script>
    <monitor name="exit_code" ordering="0">
    <script language="java:javascript"><![CDATA[

    function spooler_task_after(){
       var exitCode = spooler_task.exit_code;
       spooler_log.info ("Exit Code is: " + exitCode);

       /*
        call other job
       */

       result = true;
      return result;
    }

            ]]></script>
    </monitor>
    <run_time/>
</job>

结果:

代码语言:javascript
复制
2017-07-27 21:22:21.251+0800 [info]   
2017-07-27 21:22:21.251+0800 [info]   Task sample_errorhandling/job1:23026 - Protocol starts in /httx/opt/sos-scheduler/ldw-scheduler-test1/logs/task.sample_errorhandling,job1.log
2017-07-27 21:22:21.250+0800 [info]   SCHEDULER-842  Task is going to process Order sample_errorhandling/job_chain3:12, state=aaa, on JobScheduler 'http://xxxx:4444', Order's Process_class
2017-07-27 21:22:21.268+0800 [info]   SCHEDULER-726  Task runs on this JobScheduler 'http://jt-host-kvm-72:4444'
2017-07-27 21:22:21.268+0800 [info]   SCHEDULER-918  state=starting (at=never)
2017-07-27 21:22:22.466+0800 [info]   SCHEDULER-987  Starting process: '/bin/sh' '-c' '"/tmp/admin/sos.gBdCm8"'
2017-07-27 21:22:23.520+0800 [info]   [stdout] aa
2017-07-27 21:22:30.326+0800 [ERROR]  SCHEDULER-272  Terminating task after reaching deadline <job timeout="9">
2017-07-27 21:22:30.359+0800 [ERROR]  SCHEDULER-202  Connection to task has been lost, state=running_remote_process: Z-REMOTE-101  Separate process: pid=0: Connection lost / zschimmer::com::object_server::Connection::pop_operation
2017-07-27 21:22:30.359+0800 [ERROR]  SCHEDULER-202  Connection to task has been lost, state=release: Z-REMOTE-122  Separate process pid=0: Caller has killed process
2017-07-27 21:22:30.384+0800 [ERROR]  SCHEDULER-280  Process terminated with exit code 1 (0x63)
2017-07-27 21:22:30.384+0800 [WARN]   SCHEDULER-845  Task ended without processing the order. The order remains in job's order queue in the same state
2017-07-27 21:22:30.384+0800 [info]   SCHEDULER-843  Task has ended processing of Order sample_errorhandling/job_chain3:12, state=aaa, on JobScheduler 'http:/xxxx:4444'

Way 2:

在作业链节点上添加返回代码

这种方法可以在作业执行成功或出错的情况下工作。但是当作业因超时而死亡时却失败了。

作业链中的代码:

代码语言:javascript
复制
<job_chain >
    <job_chain_node  state="aaa" job="job1" next_state="success" error_state="error">
        <on_return_codes >
            <on_return_code  return_code="1">
                <add_order  xmlns="https://jobscheduler-plugins.sos-berlin.com/NodeOrderPlugin" job_chain="/error_handling/sendmail"/>
            </on_return_code>
        </on_return_codes>
    </job_chain_node>

    <job_chain_node  state="success"/>

    <job_chain_node  state="error"/>
</job_chain>
EN

回答 1

Stack Overflow用户

发布于 2018-09-20 14:57:22

您可以使用error_state=属性。当JobScheduler由于超时而终止任务时,这将作为错误情况处理。

请注意,next_state状态的errorHandling是错误,在JOC中指示这是一个错误,并且errorHandling状态有自己的error_state来指示errorHandler本身是否失败。

代码语言:javascript
复制
 <job_chain>
     <job_chain_node  state="100" job="job1" next_state="200" error_state="errorHandling"/>
     <job_chain_node  state="200" job="job2" next_state="success" error_state="errorHandling"/>
     <job_chain_node  state="errorHandling" job="errorHandlerJob" next_state="error" error_state="errorInErrorHandling"/>
     <job_chain_node  state="success"/>
     <job_chain_node  state="errorInErrorHandling"/>
     <job_chain_node  state="error"/>
 </job_chain>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45365713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档