You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Once the task of a job is finished, you can call various commands depending on its exit code (see http://www.sos-berlin.com/doc/en/scheduler.doc/xml/commands.xml).
These commands are especially "<start_job/>" or "<add_order/>".
Both commands are supported in JOE:

  • go to command
  • add a new command
  • choose an exit code, where errorh1. (exit code <> 0) and _success(exit code h2. 0)
  • use the add job or add order buttons to select the command

There are other more rare use commands (see http://www.sos-berlin.com/doc/en/scheduler.doc/xml_commands.xml).
The other commands may also be indicated on JOE, but you must use the "edit XML" function in the context menu of a job.
You get an textarea where you can insert the command. Exampleh1.
We have a standalone job which calls an shell script. This shell script returns various exit codes.

If the exit code is 1 then you want that the job stops.

If the exit code is 5 then you want that the job restarts in 1 hour.

All other exit codes can be ignored and will set equals 0.

 <job title="handle_exit_codes_with_api">
     <script language="shell">
         <![CDATA[
 ./config/live/test/test.sh
         ]]>
     </script>
 </job>

Without API

  1. set stop_on_erroh1. "no" (a checkbox right above in the job main formular in JOE)
    #
    The above example has the final form:
 <job stop_on_error="no" title="handle_exit_codes">
     <script language="shell">
         <![CDATA[
 ./config/live/test/test.sh
 RC=$?
 case "$RC" in
 	"0")	echo "Script ends with exit code $RC"
 		;;
 	"1")	echo "Script ends with exit code $RC" >&2
 		echo "Job will stopped" >&2
 		;;
 	"5")	echo "Script ends with exit code $RC" >&2
 		echo "Job restarts in 30 seconds"
 		;;
 	*) 	echo "Script ends with exit code $RC" >&2
 		echo "Exit code changed to 0"
 		RC=0
 		;;
 esac
 exit $RC
         ]]>
     </script>
     <commands on_exit_code="1">
         <modify_job job="/test/handle_exit_codes" cmd="stop"/>
     </commands>
     <commands on_exit_code="5">
         <start_job job="/test/handle_exit_codes" at="now+30">
             <params><copy_params from="task"/></params>
         </start_job>
     </commands>
 </job> 

With API

  1. set stop_on_error"no" (a checkbox right above in the job main formular in JOE)
  2. add Pre-/Postprocessing and insert the following javascript lines
    You find the API documentation at http://www.sos-berlin.com/doc/en/scheduler.doc/api/api.xml.
 function spooler_task_after()\{
 	spooler_job.clear_delay_after_error();
 	var rc = spooler_task.exit_code;
 	switch(rc) \{
 		case  0 : 
 			spooler_log.info("Script has ended with exit code " + rc);
 			break;
 		case  1 : 
 			spooler_log.error("Script has ended with exit code " + rc);
 			spooler_log.error("Job will stopped");
 			spooler_job.delay_after_error(1) = "stop";
 			break;
 		case  5 : 
 			spooler_log.error("Script has ended with exit code " + rc);
 			spooler_log.info("Job restarts in 30 seconds");
 			spooler_job.state_text="Job restarts in 30 seconds";
 			spooler_job.delay_after_error(1) = "30";
 			break;
 		default : 
 			spooler_log.warn("Job has ended with exit code " + rc);
 			spooler_log.info("Exit code changed to 0");
 			spooler_task.exit_code = 0;
 			break;
 	\}
 \}

The above example has the final form:

 <job stop_on_error="no" title="handle_exit_codes_with_api">
     <script language="shell">
         <![CDATA[
 ./config/live/test/test.sh
         ]]>
     </script>
     <monitor name="exit_code_handler" ordering="0">
         <script language="javascript">
             <![CDATA[
 function spooler_task_after()\{
 	spooler_job.clear_delay_after_error();
 	var rc = spooler_task.exit_code;
 	switch(rc) \{
 		case  0 : 
 			spooler_log.info("Script has ended with exit code " + rc);
 			break;
 		case  1 : 
 			spooler_log.error("Script has ended with exit code " + rc);
 			spooler_log.error("Job will stopped");
 			spooler_job.delay_after_error(1) = "stop";
 			break;
 		case  5 : 
 			spooler_log.error("Script has ended with exit code " + rc);
 			spooler_log.info("Job restarts in 30 seconds");
 			spooler_job.state_text="Job restarts in 30 seconds";
 			spooler_job.delay_after_error(1) = "30";
 			break;
 		default : 
 			spooler_log.warn("Job has ended with exit code " + rc);
 			spooler_log.info("Exit code changed to 0");
 			spooler_task.exit_code = 0;
 			break;
 	\}
 \}
             ]]>
         </script>
     </monitor>
     <run_time/>
 </job>
  • No labels