Table of Contents |
---|
| outlinh1. true |
---|
| outlinh1. true |
---|
1 | printablefalse |
---|
2 | stylh1. none |
---|
3 | indent20px |
---|
|
Once the task of a job has terminated you can call various commands depending on its exit code (see commands element).
...
Other commands may also be indicated in JOE, however, you have to use the "edit XML" function in the context menu of a job to add such commands. A panel will be displayed where you can insert the command.
We assume a standalone job (./config/live/test/call_test.job.xml) which calls a shell script. This shell script returns various exit codes.
...
Code Block |
---|
<job>
<script language="shell"><![CDATA[
./config/live/test/test.sh
]]></script>
<run_time]>
<period single_start="12:00"/>
<period begin="00:00:01" end="24:00"/>
</run_time>
</job>
|
- Set the job attribute stop_on_error to the value
no
- Add command for exit code 1:
<modify_job job="/test/call_test" cmd="stop"/>
- Add command for exit code 5:
<start_job job="/test/call_test" at="now + 01:00"/>
- Complete the shell script in which you store the exit code and change it in accordance with the requirement
Code Block |
---|
|
./config/live/test/test.sh
RC=$?
case "$RC" in
"0") echo "Script has ended with exit code $RC"
;;
"1") echo "Script has ended with exit code $RC" >&2
echo "Job will stopped" >&2
;;
"5") echo "Script has ended with exit code $RC" >&2
echo "Job restarts in 1 hour"
;;
*) echo "Script has ended with exit code $RC" >&2
echo "Exit code changed to 0"
RC=0
;;
esac
exit $RC
|
...
The above example is added to a job definition like this:
Code Block |
---|
|
<job stop_on_error="no">
<script language="shell"><![CDATA[
./config/live/test/test.sh
RC=$?
case "$RC" in
"0") echo "Script has ended with exit code $RC"
;;
"1") echo "Script has ended with exit code $RC" >&2
echo "Job will stopped" >&2
;;
"5") echo "Script has ended with exit code $RC" >&2
echo "Job restarts in 1 hour"
;;
*) echo "Script has ended with exit code $RC" >&2
echo "Exit code changed to 0"
RC=0
;;
esac
exit $RC
]]></script>
<run_time>
<period single_start="12:00"/>
<period begin="00:00:01" end="24:00"/>
</run_time>
<commands on_exit_code="1">
<modify_job job="/test/call_test" cmd="stop"/>
</commands>
<commands on_exit_code="5">
<start_job job="/test/call_test" at="now + 01:00">
<params><copy_params from="task"/></params>
</start_job>
</commands>
</job>
|
- Set the job attribute stop_on_error to the value
no
(a checkbox right above in the job main formular in JOE) - Add Pre-/Post-processing and insert the following Javascript lines.
You will find the API documentation at http://www.sos-berlin.com/doc/en/scheduler.doc/api/api.xml.
Code Block |
---|
|
function spooler_task_after() {
spooler_job.clear_delay_after_error();
var rc = spooler_task.exit_code();
switch(rc) {
case 0 :
spooler_log.info("Script ended with exit code " + rc);
break;
case 1 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.error("Job will stop");
spooler_job.set_delay_after_error(1, "stop");
break;
case 5 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.info("Job restarts in 1 hour");
spooler_job.set_state_text( "Job restarts in 1 hour" );
spooler_job.set_delay_after_error( 1, "01:00:00" );
break;
default :
spooler_log.warn("Script ended with exit code " + rc);
spooler_log.info("Exit code changed to 0");
spooler_task.set_exit_code( 0 );
break;
}
}
|
...
The above example is added to a job definition like this:
Code Block |
---|
|
<job stop_on_error="no">
<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 ended with exit code " + rc);
break;
case 1 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.info("Job will stop");
spooler_job.set_state_text( "Job will stop" );
spooler_job.set_delay_after_error( 1, "stop" );
break;
case 5 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.info("Job restarts in 1 hour");
spooler_job.set_state_text( "Job restarts in 1 hour" );
spooler_job.set_delay_after_error( 1, "01:00:00" );
break;
default :
spooler_log.warn("Job ended with exit code " + rc);
spooler_log.info("Exit code changed to 0");
spooler_task.set_exit_code( 0 );
break;
}
}
]]>
</script>
</monitor>
<[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/run_time.xml run_time]>
<period single_start="12:00"/>
<period begin="00:00:01" end="24:00"/>
</run_time>
</job>
|
We assume an order job (./config/live/test/call_test.job.xml) which calls a shell script. This shell script returns various exit codes.
- If the exit code is 1 then the order should stop.
- If the exit code is 5 then the order should restart in 1 hour.
- All other exit codes can be ignored and will be treated as exit code 0.
Code Block |
---|
|
<job order="yes" stop_on_error="no">
<script] language="shell"><![CDATA[
./config/live/test/test.sh
]]></script>
</job>
|
...
- Set the job attribute stop_on_error to the value
no
(a checkbox right above in the job main form in JOE) - Add Pre-/Post-processing and insert the below Javascript lines
You will find the API documentation at http://www.sos-berlin.com/doc/en/scheduler.doc/api/api.xml.
Code Block |
---|
|
function spooler_task_after() {
var rc = spooler_task.exit_code();
switch( rc ) {
case 0 :
spooler_log.info("Script ended with exit code " + rc);
break;
case 1 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.error("suspend order");
spooler_task.order().set_suspended( true );
spooler_task.order().set_state( spooler_task.order().state() );
break;
case 5 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.info("Order restarts job in 1 hour");
spooler_job.state_text="Order restarts job in 1 hour";
spooler_job.set_delay_order_after_setback( 1, "01:00" );
spooler_job.set_max_order_setbacks( 1 );
spooler_log.error("setback order");
spooler_task.order().setback();
break;
default :
spooler_log.warn("Script ended with exit code " + rc);
spooler_log.info("Exit code changed to 0");
spooler_task.set_exit_code( 0 );
var next_state = spooler_task.order().job_chain_node().next_state();
spooler_log.info("order state changed to " + next_state);
spooler_task.order().set_state( next_state );
break;
}
}
|
...
The above example is added to a job definition like this:
Code Block |
---|
|
<job order="yes" stop_on_error="no">
<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 ended with exit code " + rc);
break;
case 1 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.error("suspend order");
spooler_task.order().set_suspended( true );
spooler_task.order().set_state( spooler_task.order().state() );
break;
case 5 :
spooler_log.error("Script ended with exit code " + rc);
spooler_log.info("Order restarts job in 1 hour");
spooler_job.set_state_text( "Order restarts job in 1 hour" );
spooler_job.set_delay_order_after_setback( 1, "01:00" );
spooler_job.set_max_order_setbacks( 1 );
spooler_log.error("setback order");
spooler_task.order().setback();
break;
default :
spooler_log.warn("Script ended with exit code " + rc);
spooler_log.info("Exit code changed to 0");
spooler_task.exit_code = 0;
var next_state = spooler_task.order().job_chain_node().next_state();
spooler_log.info("order state changed to " + next_state);
spooler_task.order.set_state( next_state );
break;
}
}
]]></script>
</monitor>
</job>
|