Versions Compared

Key

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

Table of Contents
outlinh1. true
outlinh1. true
1printablefalse
2stylh1. none
3indent20px

...

Target Audience

  • The following instructions apply to users who want to make use of the JobScheduler API Interface in their Perl scripts.
    • The Perl support of the JobScheduler engine should be

...

    • configured for the Perl release that is operated in your environment.

    • Currently JobScheduler comes with support for Perl release 5.18.2

...

Prerequisites on Linux

The JobScheduler needs a library ./lib/libsosperlscript.<perl-version>.so which that is included in the setup.

Since JobScheduler release 1.6.4043 the library ./lib/libsosperlscript.5.18.2.so is included which that is compiled with Perl 5.18.2.

...

  1. You have to install a 32Bit Perl or a 64Bit Perl with a additional 32Bit Perl interpreter
  2. Create 2 symlinks in the ./lib directory of the JobScheduler installation
    1. The first symlink with the name libperl.so have has to point to the 32Bit Perl interpreter libperl.so of the Perl installation
    2. The second symlink with the name libsosperlscript.so have has to point to the ./lib/libsosperlscript.<perl-version>.so.

In the ./lib directory of the JobScheduler installation you will find the following libsosperlscript.<perl-version>.so.

  • libsosperlscript.5.18.2.so
  • libsosperlscript.5.14.0.so (deprecated)
  • libsosperlscript.5.12.0.so (deprecated)
  • libsosperlscript.5.10.0.so (deprecated)
  • libsosperlscript.5.8.8.so (deprecated)

For example, assumed that you have a Perl installation with version 5.12.3 and the 32Bit libraries are located in /usr/lib/perl5.
Then go navigate to the ./lib directory of the JobScheduler installation and create the following symlinks:

Code Block
languagebash
 > ln -s /usr/lib/perl5/5.12.3/i586-linux-thread-multi/CORE/libperl.so libperl.so
 > test -f libsosperlscript.so && rm libsosperlscript.so
 > ln -s libsosperlscript.5.12.0.so libsosperlscript.so

Since JobScheduler Release 1.6.4043 you have to point make the second symlink point to libsosperlscript.5.18.2.so.

Code Block
languagebash
 > ln -s libsosperlscript.5.18.2.so libsosperlscript.so

Otherwise you get will receive an error like

Code Block
 [ERROR]  COM-80020009  DISP_E_EXCEPTION [begin] [] [COM-800401F8  CO_E_DLLNOTFOUND [CoGetClassObject] [perlScript], in Remote_module_instance_server::begin], method=call
 [info]   dlopen("libsosperlscript.so"): /install/path/of/jobscheduler/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /install/path/of/jobscheduler/lib/libsosperlscript.so)

...

  1. You have to install a 64Bit Perl
  2. Create 2 symlinks in the ./lib directory of the JobScheduler installation
    1. The first symlink with the name libperl.so have has to point to the 64Bit Perl interpreter libperl.so of the Perl installation
    2. The second symlink with the name libsosperlscript.so have has to point to the ./lib/libsosperlscript.<perl-version>.so.

In the ./lib directory of the JobScheduler installation you will find the following libsosperlscript.<perl-version>.so.

...

For example you have a Perl installation with version 5.12.3 and the 64Bit libraries are located in /usr/lib/perl5.
Then go navigate to the ./lib directory of the JobScheduler installation and create the following symlinks:

Code Block
languagebash
 > ln -s /usr/lib/perl5/5.12.3/x86_64-linux-thread-multi/CORE/libperl.so libperl.so
 > test -f libsosperlscript.so && rm libsosperlscript.so
 > ln -s libsosperlscript.5.18.2.so libsosperlscript.so

...

The libsosperlscript.<perl-version>.so set  library sets the @INC variable from the environment where libsosperlscript.<perl-version>.so was compiled.
It can This could be different from your own Perl environment.
TypeIn such cases you can use

code
Code Block
languagebash
   perl -e 'print join "\n", @INC'

to get the content of @INC of your own Perl environment.

In the JobScheduler you have (e.g. for libsosperlscript.5.18.2.so) comes with the following content of @INC

...

You can test it with a JobScheduler job like

Code Block
languagehtml/xml
  <job>
    <script language="perlScript">
    <![CDATA[
        
#!/usr/bin/perl
print join "\n", @INC;
        
    ]]>

   </script>
   <run_time/>
  </job>

You have to set the PERL5LIB environment variable for the JobScheduler if the @INC has environment variable shows some different content.
For this edit the ./user_bin/jobscheduler_environment_varibales.sh with

Code Block
  export PERL5LIB=`perl -e 'print join ":", @INC'`

Look at See the article How I to add _ environment variables for all jobs for more information how you change the environment of the JobScheduler.

...

You have to install an current ActivePerl with the same number of bits like 32Bit or 64Bit as for the JobScheduler release.

Job Example

Now you can test the JobScheduler - Perl- API PI with e.g. the following job.:

Code Block
languagehtml/xml
<job>
	<script language="perlScript">
	<![CDATA[
		sub spooler_init {
    			my $rc = 1;
    
    			$spooler_log->info("spooler_init");  
    
    			return $rc;
  		}
  			
  			
  		sub spooler_process {
    			my $rc = 1;
    
    			$spooler_log->info("spooler_process");
    			$spooler_log->info($spooler_job->name . " is running"); 

    			return signal_return($rc);
  		}
  			
  			
  		sub spooler_exit {
     
     			$spooler_log->info("spooler_exit"); 

  		}
  			
  			
  		###################################################
  		# This method provides that the method   
  		# spooler_process is called only for one time.
  		#
  		# Standalone Jobs: 
  		# JobScheduler continues calling the spooler_process 
  		# method until it returns 0.
  		#  
  		# Order Jobs in a Job Chain: 
  		# The Order acquires the next node in the Job Chain 
  		# if spooler_process returns 1
  		# and the error node if spooler_process returns 0
  		#
  		# see http://www.sos-berlin.com/doc/en/scheduler.doc/api/Job_impl-perl.xml#method__spooler_process
  		###################################################
  		sub signal_return {
    			my ($rc) = @_;
    			if(defined($spooler_task->order)) { #is an Order Job
    	 			return $rc;
    			}
    			return 0;
  		}
  			
        ]]>
	</script>
	<run_time/>
</job>

For more information about the JobScheduler API look at see http://www.sos-berlin.com/doc/en/scheduler.doc/api/api-perl.xml

...