Prerequisites on Linux
The Perl support of JobScheduler engine should be switched to the latest Perl release (currently 5.18.2) (http://www.sos-berlin.com/jira/browse/JS-1096).
The JobScheduler needs a library ./lib/libsosperlscript.<perl-version>.so which is included in the setup.
Since JobScheduler release 1.6.4043 the library ./lib/libsosperlscript.5.18.2.so is included which is compiled with Perl 5.18.2.
This library works with Perl versions 5.12.x, 5.14.x, 5.16.x too.
32Bit JobScheduler
- You have to install a 32Bit Perl or a 64Bit Perl with a additional 32Bit Perl interpreter
- Create 2 symlinks in the ./lib directory of the JobScheduler installation
- The first symlink with the name libperl.so have to point to the 32Bit Perl interpreter libperl.so of the Perl installation
- The second symlink with the name libsosperlscript.so have to point to the ./lib/libsosperlscript.<perl-version>.so.
In the ./lib directory of the JobScheduler installation you 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 you have a Perl installation with version 5.12.3 and the 32Bit libraries are located in /usr/lib/perl5.
Then go to the ./lib directory of the JobScheduler installation and create the following symlinks:
> 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 the second symlink to libsosperlscript.5.18.2.so.
> ln -s libsosperlscript.5.18.2.so libsosperlscript.so
Otherwise you get an error like
[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)
64Bit JobScheduler
- You have to install a 64Bit Perl
- Create 2 symlinks in the ./lib directory of the JobScheduler installation
- The first symlink with the name libperl.so have to point to the 64Bit Perl interpreter libperl.so of the Perl installation
- The second symlink with the name libsosperlscript.so have to point to the ./lib/libsosperlscript.<perl-version>.so.
In the ./lib directory of the JobScheduler installation you find the following libsosperlscript.<perl-version>.so.
- libsosperlscript.5.18.2.so
- libsosperlscript.5.8.8.so (deprecated)
For example you have a Perl installation with version 5.12.3 and the 64Bit libraries are located in /usr/lib/perl5.
Then go to the ./lib directory of the JobScheduler installation and create the following symlinks:
> 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
Set $PERL5LIB
The libsosperlscript.<perl-version>.so set the @INC variable from the environment where libsosperlscript.<perl-version>.so was compiled.
It can be different from your own Perl environment.
Type
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) the following content of @INC
/usr/local/perl-5.18.2/lib/site_perl/5.18.2/i686-linux-thread-multi /usr/local/perl-5.18.2/lib/site_perl/5.18.2 /usr/local/perl-5.18.2/lib/5.18.2/i686-linux-thread-multi /usr/local/perl-5.18.2/lib/5.18.2 .
You can test it with a JobScheduler job like
<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 different content.
For this edit the ./user_bin/jobscheduler_environment_varibales.sh with
export PERL5LIB=`perl -e 'print join ":", @INC'`
Look at the article How I add_environment variables for more information how you change the environment of the JobScheduler.
Prerequisites on Windows
You have to install an current ActivePerl with the same number of bits like the JobScheduler.
Job Example
Now you can test the JobScheduler-Perl-API with e.g. the following job.
<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 http://www.sos-berlin.com/doc/en/scheduler.doc/api/api-perl.xml