...
This example describes how you can start jobs, add orders to job chains by your application. The examples are written in PHP.
Feature Status
Display feature availability | ||||
---|---|---|---|---|
|
Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
Downloads
- package_scheduler.zip - basic communication classes
- package_classes.zip - basic classes
Instructions
...
Code Block |
---|
<?xml version="1.0" encoding="ISO-8859-1"?> <spooler> <answer time="2008-04-08 15:50:33.536"> <ok/> </answer> </spooler> |
Example with PHP Socket Communication (@fsockopen)
...
- In your web directory set up a file called: packages.Into the folder scheduler put the file sos_scheduler_command_inc.php and into the folder class put the file sos_class.inc.php.
You can find these files unter scheduler/php_xml_interface/packages package_scheduler.zip - In your application program include the class with:
require_once( 'scheduler/sos_scheduler_command.inc.php');
...
Code Block | ||||
---|---|---|---|---|
| ||||
//open socket $command = new SOS_Scheduler_Command(‘localhost’,4454, 60); //build command $cmd = '<add_jobs><job name="myJob" title = "my first job"> <script'; $cmd += 'language="shell"> <![CDATA[dir c:\temp ]]> </script> '; $cmd += '<run_time> <period '; $cdm += 'single_start="18:00"/></run_time></job></add_jobs>'; if (!$command->connect()) { echo$get_error(). __FILE__ . __LINE__ ; return 0; } //send command $this->command->command($cmd); if ($command->get_answer_error()) { echo$command->get_error() . ‘ ‘ . __FILE__ . ‘ ‘ . __LINE__ ; } //close socket $command->disconnect(); |
Commands with xml-php Interface
...
Code Block | ||||
---|---|---|---|---|
| ||||
if(!defined('APP_SCHEDULER_HOST')) { define ( 'APP_SCHEDULER_HOST', 'localhost' ); } if(!defined('APP_SCHEDULER_PORT')) {define( 'APP_SCHEDULER_PORT', '4454' ); } //load missing classes and returns an object of the class function &get_instance($class, $include_path='scheduler/', $extension='.inc.php') { if ( !class_exists($class) ) { include( $include_path . strtolower($class) . $extension ); } $object = new $class; $object->host=APP_SCHEDULER_HOST; $object->port=APP_SCHEDULER_PORT; return $object; } |
The use of the php-xml interface is explained. You can find a detailed documentation of the classes in the formats PHP and DOC under: http://www….
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------- // How to add an order to an existing jobchain //------------------------------------------------------------------------- $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); //Create an add_order object (SOS_Scheduler_Command_Add_Order). $order = $order_launcher->add_order('jobchain',1); //Setting some properties of the order object $order->id='sostest_12'; $order->replace="yes"; $order->priority="10"; $order->title="Testorder"; $order->web_service=""; $order->at="now+60"; $order->addParam('test','any value'); // Sending XML to the JobScheduler if (!$order_launcher->execute($order)) { echo'error occurred adding order: ' . $order_launcher->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<add_order at="now+60" id="sostest_12" job_chain="jobchain" priority="10" replace="yes" state="1" title="Testorder"> <params> <param name="test" value="any value"/> </params> </add_order> |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------- // How to add an order to an existing jobchain //------------------------------------------------------------------------- $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); //Create an add_order object (SOS_Scheduler_Command_Add_Order). $order = $order_launcher->add_order('jobchain',1); //Setting some properties of the order object $order->id='sostest_12'; $order->replace="yes"; $order->priority="10"; $order->title="Testorder"; $order->web_service=""; $order->at="now+60"; $order->addParam('test','any value'); // Sending XML to the JobScheduler if (!$order_launcher->execute($order)) { echo'error occurred adding order: ' . $order_launcher->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<remove_order order="sostest_13" job_chain="jobchain"/> |
...
...
Change an Existing Order
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------ //How to change an existing order //------------------------------------------------------------------------ //starting with adding an order. $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); $order = $order_launcher->add_order('jobchain',3); $order->replace='yes'; $order->id='sostest_14'; $order->run_time()->single_start="22:00"; if (!$order_launcher->execute($order)) { echo'error occurred adding order: ' . $order_launcher->get_error(); exit; } //Now change the order.state $order = $order_launcher->modify_order('jobchain','sostest_14'); $order->state=2; if (!$order_launcher->execute($order)) { echo'error occurred modifying order: ' . $order_launcher->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<modify_order order="sostest_14" job_chain="jobchain" state="2"></modify_order> |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//----------------------------------------------------------------------- // How to start an order with submit. // This can be useful, when you know orders jobchain, id, state and starttime. //------------------------------------------------------------------------ $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); if (! $order_launcher->submit('jobchain','sostest_15',2,'now+30')) { echo'error occurred submitting order: ' . $order_launcher->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<add_order at="now+30" id="sostest_15" job_chain="jobchain" replace="yes" state="2"> </add_order> |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------ // How to add a job //------------------------------------------------------------------------ $job = &get_instance('SOS_Scheduler_Job','scheduler/'); //Setting some properties $job->force_idle_timeout = "yes"; $job->idle_timeout = "1000"; $job->ignore_signals = "all"; $job->java_options = "java"; $job->min_tasks = "2"; $job->name = "test_jobname3"; $job->order = "no"; $job->priority = "1" ; $job->stop_on_error = "no"; $job->tasks = "4"; $job->temporary = "no"; $job->timeout = "10"; $job->title = "my job"; $job->visible = "yes"; //Defining some parameters $job->addParam('var1','value1'); $job->addParam('var2','value2'); //Set the implementation $job->script('javascript')->script_source='a=1;'; //The job has a runtime $job->run_time()->period()->single_start = "10:00"; $job->run_time()->period()->single_start = "11:00"; $job->run_time()->at('2006-12-24 12:20'); $job->run_time()->at('2006-12-24 12:25'); $job->run_time()->at('2006-12-24 12:35'); /** A period for day=1 */ $p = $job->run_time()->weekdays('1')->period(); $p->single_start = '07:30'; $job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/'); //First removing the job $job_command->remove($job->name); if (! $job_command->add_jobs($job)) { echo'error occurred adding job: ' . $job_command->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<job force_idle_timeout="yes" idle_timeout="1000" ignore_signals="all" java_options="java" min_tasks="2" name="test_jobname3" order="no" priority="1" stop_on_error="no" tasks="4" temporary="no" imeout="10" itle="my job" isible="yes"> <params> param name="var1" value="value1"/> param name="var2" value="value2"/> </params> <script language="javascript"> ![CDATA[a=1;]]></script> <run_time> period single_start="10:00"/> period single_start="11:00"/> at at="2006-12-24 12:20"/> at at="2006-12-24 12:25"/> at at="2006-12-24 12:35"/> weekdays> day day="1"> period single_start="07:30"/> day> </weekdays> </run_time> </job> |
...
Deleting a Job
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------ // How to to delete a job //------------------------------------------------------------------------ // First we add the job to have one, which we can remove $job = &get_instance('SOS_Scheduler_Job','scheduler/'); $job->name = "jobtoberemoved"; $job->title = "my removed job"; $job->visible = "yes"; //Set the implentation $job->script('javascript')->script_source='a=1;'; $job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/'); if (! $job_command->add_jobs($job)) { echo'error occurred adding job: ' . $job_command->get_error(); exit; } //Now the job will be removed if (! $job_command->remove($job->name)) { echo'error occurred removing job: ' . $job_command->get_error(); exit; } |
...
...
Generated XML
Code Block |
---|
<job name="jobtoberemoved" tasks="1" temporary="no" title="my removed job" visible="yes"> <script language="javascript"> <![CDATA[a=1;]]> </script> </job> <modify_job job="jobtoberemoved" cmd="remove"/> |
...
...
Starting a Job
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------------ // How to Start a job //------------------------------------------------------------------------ // First we add the job to have one, which we can start $job = &get_instance('SOS_Scheduler_Job','scheduler/'); $job->name = "test_jobname3"; $job->title = "my job"; $job->visible = "yes"; $job->script('javascript')->script_source='a=1'; $job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/'); if (! $job_command->add_jobs($job)) { echo'error occurred adding job: ' . $job_command->get_error(); exit; } if (! $job_command->start($name='test_jobname3', $start_at="now" )) { echo'error occurred submitting job: ' . $job_command->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<start_job job="test_jobname3" at="now"></start_job> |
...
Setting the runtime of a job
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//------------------------------------------------------------------- // How to set the runtime of a job. Some examples //------------------------------------------------------------------- // First we add the job to have one, which we can start $job = &get_instance('SOS_Scheduler_Job','scheduler/'); $job->name = "test_jobname33"; $job->title = "test_jobname33"; $job->visible = "yes"; $job->script('javascript')->script_source='a=1'; $job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/'); if (! $job_command->add_jobs($job)) {echo'error occurred adding job: ' . $job_command->get_error(); exit; } //Start on the 28.st at 11:00 $job->run_time()->monthdays('28')->period()->single_start='11:00'; //Adding a period $period = new SOS_Scheduler_Runtime_Period(); $period->begin='12:00'; $period->end='13:00'; $period->repeat='60'; $job->run_time()->date('2006-30-11')->addPeriod($period); //starting at 11:00 $job->run_time()->at('11:00'); if (!$job_command->execute($job)) {echo'error occurred : ' . $job_command->get_error(); exit; } |
...
...
Generated XML
Code Block |
---|
<job name="test_jobname33" tasks="1" title="test_jobname33" visible="yes"> <script language="javascript"><![CDATA[a=1]]></script> <run_time> <at at="11:00"/> <date date="2006-30-11"> <period begin="12:00" end="13:00" repeat="60"/> </date> <monthdays> <day day="28"> <period single_start="11:00"/> </day> </monthdays> </run_time> </job> |
...
...
Setting the runtime of an order
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//-------------------------------------------------------------- //How to set the runtime of an order. Some examples //-------------------------------------------------------------- //adding an order with a runtime $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); $order = $order_launcher->add_order('jobchain',3); $order->replace='yes'; $order->id='sostest_14'; //Start on the 28.st at 11:00 $order->run_time()->monthdays('28')->period()->single_start='12:00'; //Adding a period $period = new SOS_Scheduler_Runtime_Period(); $period->begin='12:00'; $period->end='13:00'; $period->repeat='60'; $order->run_time()->ultimos('22')->addPeriod($period); //starting at 11:00 $order->at='2008-11-01 13:00'; if (!$order_launcher->execute($order)) {echo'error occurred adding order: ' . $order_launcher->get_error(); exit; } |
...
...
Generated XML
Code Block |
---|
<add_order at="2008-11-01 13:00" id="sostest_14" job_chain="jobchain" replace="yes" state="3"> <run_time> <monthdays> <day day="28"> <period single_start="12:00"/> </day></monthdays> <ultimos> <day day="22"> <period begin="12:00" end="13:00" repeat="60"/> </day> </ultimos> </run_time> </add_order> |
...
...
Working with hot folders
...
Adding a Job to a hot folder
Code Block | ||||
---|---|---|---|---|
| ||||
// First we add the job to have one, which we can start $job = &get_instance('SOS_Scheduler_Job','scheduler/'); $job->name = "test_jobname77"; $job->title = "test_jobname77"; $job->visible = "yes"; $job->script('javascript')->script_source='a=1'; $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/'); if (! $xml=$modify_hot_folder_command->store($job,"./test")) { echo'error occurred adding job: ' . $modify_hot_folder_command->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<modify_hot_folder folder="./test"> <job name="test_jobname77" tasks="1" temporary="no" title="test_jobname77" visible="yes"> <script language="javascript"><![CDATA[a=1]]></script> </job> </modify_hot_folder> |
...
Adding a Lock to a hot folder
Code Block | ||||
---|---|---|---|---|
| ||||
//-------------------------------------------------- // How to add a lock to hot folder //-------------------------------------------------- // First we add the lock to have one, which we can start $lock = &get_instance('SOS_Scheduler_Lock','scheduler/'); //Setting some properties $lock->max_non_exclusive = 1; $lock->name="myLock"; //Adding the lock to the hotfolder $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/'); if (! $xml=$modify_hot_folder_command->store($lock,"./test")) { echo'error occurred adding lock: ' . $modify_hot_folder_command->get_error(); exit; } |
...
...
Generated XML
Code Block |
---|
<modify_hot_folder folder="./test"> <lock name="myLock" max_non_exclusive="1"></lock> </modify_hot_folder> |
...
Adding a Process_class to a hot folder
Code Block | ||||
---|---|---|---|---|
| ||||
//------------------------------------------------------------------------- // How to add a process_class to hot folder //------------------------------------------------------------------------- // First we add the process_class to have one, which we can start $process_class = &get_instance('SOS_Scheduler_Process_class','scheduler/'); //Setting some properties $process_class->max_processes = 1; $process_class->name= |
...
Generated XML
Code Block |
---|
<modify_hot_folder folder="./test"> <process_class name="myProcess_class" max_processes="1" replace="yes"> </process_class> </modify_hot_folder> |
...
Code Block | ||||
---|---|---|---|---|
| ||||
//------------------------------------------------------------- // How to add a job_chain to hot folder //------------------------------------------------------------- $job_chain = &get_instance('SOS_Scheduler_Job_Chain','scheduler/'); //Setting some properties $job_chain->name = "myJob_Chain"; //The job has a file_order_sources $job_chain->file_order_source("/myDir","1"); $job_chain->file_order_source("/myOtherDir","2"); //The job has a file_order_sinks $job_chain->file_order_sink("6") ->remove="yes"; $job_chain->file_order_sink("99") ->remove="yes"; $job_chain->file_order_sink("999")->remove="yes"; //Adding some Job_chain_nodes $job_chain->add_job("my_job1","1","2","99"); $job_chain->add_job("my_job2","2","3","99"); $job_chain->add_job("my_job3","3","4","99"); $job_chain->add_job("my_job4","4","5","999"); //or adding a node $job_chain_node = new SOS_Scheduler_Job_Chain_Node(); //Setting some properties $job_chain_node->state = "5"; $job_chain_node->error_state = "99"; $job_chain_node->next_state = "6"; $job_chain_node->on_error = "suspend"; $job_chain_node->job = "myJob5"; //adding the node $job_chain->add_node($job_chain_node); //Adding the job_chain to the hotfolder $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/'); if (! $xml=$modify_hot_folder_command->store($job_chain,"./test/chains")) { echo'error occurred adding job chain: ' . $modify_hot_folder_command->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<modify_hot_folder folder="./test/chains"> <job_chain name="myJob_Chain"> <file_order_source directory="/myDir"/> <file_order_source directory="/myOtherDir"/> <file_order_sink state="6" remove="yes"/> <file_order_sink state="99" remove="yes"/> <file_order_sink state="999" remove="yes"/> <job_chain_node job="my_job1" state="1" next_state="2" error_state="99"/> <job_chain_node job="my_job2" state="2" next_state="3" error_state="99"/> <job_chain_node job="my_job3" state="3" next_state="4" error_state="99"/> <job_chain_node job="my_job4" state="4" next_state="5" error_state="999"/> <job_chain_node job="myJob5" state="5" next_state="6" error_state="99"/> </job_chain> </modify_hot_folder> |
...
...
Adding an Order to a hot folder
Code Block | ||||
---|---|---|---|---|
| ||||
//------------------------------------------------------------- // How to add an order to a hot_folder //------------------------------------------------------------- $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); //Create an order object (SOS_Scheduler_Command_Order). $order = $order_launcher->order('myJob_Chain',1); //Setting some properties of the order object $order->id='my_Order'; $order->replace="yes"; $order->priority="10"; $order->title="Testorder"; $order->web_service=""; $order->at="now+60"; $order->addParam('test','any value'); //Adding the job_chain to the hotfolder $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/'); if (! $xml=$modify_hot_folder_command->store($order,"./test/chains")) { echo 'error occurred adding order: ' . $modify_hot_folder_command->get_error(); exit; } |
...
Generated XML
Code Block |
---|
<modify_hot_folder folder="./test/chains"> <order at="now+60" id="my_Order" job_chain="myJob_Chain" priority="10" replace="yes" state="1" title="Testorder"> <params> <param name="test" value="any value"/> </params> </order> </modify_hot_folder> |
...
Adding a nested job chain to a hot folder
Code Block | ||||
---|---|---|---|---|
| ||||
//------------------------------------------------------------- // How to add an order to a hot_folder //------------------------------------------------------------- $order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/'); //Create an order object (SOS_Scheduler_Command_Order). $order = $order_launcher->order('myJob_Chain',1); //Setting some properties of the order object $order->id='my_Order'; $order->replace="yes"; $order->priority="10"; $order->title="Testorder"; $order->web_service=""; $order->at="now+60"; $order->addParam('test','any value'); //Adding the job_chain to the hotfolder $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/'); if (! $xml=$modify_hot_folder_command->store($order,"./test/chains")) { echo'error occurred adding order: ' . $modify_hot_folder_command->get_error(); exit; } |
...
Generated XML
Code Block | ||
---|---|---|
| ||
<modify_hot_folder> <job_chain name="myNestedJob_Chain"> <job_chain_node.job_chain job_chain="myJob_Chain" state="100" next_state="200" error_state="1200"/> <job_chain_node.job_chain job_chain="myNext_Chain" state="200" next_state="300" error_state="1200"/> <job_chain_node.end state="1200"/> <job_chain_node.end state="300"/> </job_chain> </modify_hot_folder> |
...