Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

You can download the files from: sample_errorhandling.zip

Code Block
       <job <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job ]order="yes"
             stop_on_error="no"
             title="Just a Sample Job"
             name="job_sample">
            <script language="shell">
                <![[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/script.xml script ]language="shell">
                <![CDATA[
 Echo here is a sample
                ]]>
            </script>
  
            <run_time<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/run_time.xml run_time]/>
        </job>
 
 

The first sample

Code Block
        <job order="yes"
       <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job ]order="yes"
             stop_on_error="no"
             name="job_with_exit_code">
            <script language="shell">
                <![CDATA[[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/script.xml script ]language="shell">
                <![CDATA[
 rem this is a shell script ending with an exit code
 exit 0
                ]]>
            </script>
 
            <monitor <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/monitor.xml monitor ]name="exitCodeDispatcher"
                     ordering="0">
                <script <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/script.xml script ]language="javascript">
                    <![CDATA[
 function spooler_task_after()\{
   var exitCode = spooler_task.exit_code;
   var order = spooler_task.order;
    
   spooler_log.info ("Exit Code is: " + exitCode);
   result = true;
   
   switch (exitCode ) \{
   case 0: //sample to proceed the job chain at another node
      spooler_log.info("proceeding with next step");
      break;
   case 1: //sample to proceed the job chain at another node
      order.state="300"
      break;
   case 2: //sample to end with an end state
      order.state="success:2"
      break;
    default: //Other exit codes are handled as an error
      //spooler_log.info("Exit Code of " + order.job_chain + "/" + order.id + " in node " + order.job_chain_node.state + " was " + exitCode);
      result = false;
      break;
     \}
  //If you want to avoid messages like
  //2011-08-04 10:13:14.531 [ERROR]  (Task sample/job_with_exit_code:1001447) SCHEDULER-280  Process terminated with exit code 1 (0x1)
  //spooler_task.exit_code = 0;
  return result;
 \}
 //This also could be done in a more generic way
 //See sample in Step job_with_exit_code_generic
                    ]]>
                </script>
            </monitor>
 
            <run_time<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/run_time.xml run_time]/>
        </job>
 

The second sample

Code Block
        <job order="yes"
  <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job ]order="yes"
             stop_on_error="no"
             name="job_with_exit_code_generic">
            <params/>
 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/params.xml params]/>
 
            <script <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/script.xml script ]language="shell">
                <![CDATA[
 rem another sample
 exit 98
                ]]>
            </script>
 
            <monitor name="exitCodeDispatcherGeneric"
    <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/monitor.xml monitor ]name="exitCodeDispatcherGeneric"
                 ordering="0">
                <script languageordering="javascript0">
                    <![CDATA[
 function spooler_task_after()\{
 //You define a node with exit.<exitCode> for each possible exitCode
 //If node is not defined, a default will be used
   var exitCode = spooler_task.exit_code;
   var order = spooler_task.order;
 
  if (exitCode != 0)\{
    newState = "exit." + exitCode;
    try \{//Checking, wether node is defined in job chain configuration
      order.job_chain.node( newState )    
   \} catch (e) \{
        order.state = "exit.default";
   \}
   order.state = "exit." + exitCode
   \}
   return true;
 \}
  [http://www.sos-berlin.com/doc/en/scheduler.doc/xml/script.xml script ]language="javascript">
                    <![CDATA[
 function spooler_task_after()\{
 //You define a node with exit.<exitCode> for each possible exitCode
 //If node is not defined, a default will be used
   var exitCode = spooler_task.exit_code;
   var order = spooler_task.order;
 
  if (exitCode != 0)\{
    newState = "exit." + exitCode;
    try \{//Checking, wether node is defined in job chain configuration
      order.job_chain.node( newState )    
   \} catch (e) \{
        order.state = "exit.default";
   \}
   order.state = "exit." + exitCode
   \}
   return true;
 \}
                    ]]>
                </script>
            </monitor>
 
            <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/run_time.xml run_time]/>
        </job>
    </jobs>
 

Here is the job chain

Code Block

   <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain.xml job_chain] orders_recoverable="yes"
                   visible="yes"
                  ]]>
          title="Sample for a job chain with handling exit codes"
       </script>
            </monitor>name="job_chain_exit_code_dispatcher">
 
            <run_time/>
        </job><[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="firstStep"
    </jobs>
 

Here is the job chain

Code Block

   <job_chain orders_recoverable="yes"
                   visiblejob="yesjob_with_exit_code"
                            titlenext_state="secondStep"Sample
  for a job chain with handling exit codes"
                   nameerror_state="job_chain_exit_code_dispatcher">error"/>
 
            <job         <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="firstStepsecondStep"
                            job="job_with_exit_code"
                            next_state="secondStep_generic"
                            errornext_state="error200"/>
 
            <job_chain_node state="secondStep"
              error_state="error"/>
 
             job="job_with_exit_code_generic<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="200"
                            nexterror_state="200error"
                            error_state="error"/>
 
            <job_chain_node state="200"job="job_sample"
                            errornext_state="error300"/>
 
            <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="300"
              job="job_sample"
              error_state="error"
              next_state="300"/>
 
            <job_chain_node statejob="300job_sample"
                            errornext_state="error400"/>
 
                           job="job_sample<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="400"
                            nexterror_state="400error"/>
   
            <job_chain_node state="400"
            job="job_sample"
                error_state="error"
            next_state="success"/>
  
            <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml  jobjob_chain_node] state="job_samplesuccess"/>
 
                           next_<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="success:2"/>
  
            <job_chain_node state="success"/>
 
            <job<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="success:2error"/>
 
            <job_chain_node state="error"/>
 
            <job<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="exit.99"/>
 
            <job<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain_node.xml job_chain_node] state="exit.default"/>
        </job_chain>