Table of Contents | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
...
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
...
Perl support for the JobScheduler API is not required if you just wanted to run existing Perl scripts with JobScheduler. In that case Perl scripts are executed in the same way as any shell scripts, see How can I create a simple shell job?
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.
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 has to point to the 32Bit Perl interpreter libperl.so of the Perl installation
- 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 | ||
---|---|---|
| ||
> 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 | ||
---|---|---|
| ||
> 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) |
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 has to point to the 64Bit Perl interpreter libperl.so of the Perl installation
- 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 | ||
---|---|---|
| ||
> 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 library sets the @INC variable from the environment where libsosperlscript.<perl-version>.so was compiled.
This could be different from your own Perl environment. In such cases you can use
Code Block | ||
---|---|---|
| ||
perl -e 'print join "\n", @INC'
|
to get the content of @INC of your own Perl environment.
JobScheduler (e.g. for libsosperlscript.5.18.2.so) comes with the following content of @INC
Code Block |
---|
/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
Code Block | ||
---|---|---|
| ||
<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 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'`
|
See the article How to add environment variables for all jobs 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 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 | ||
---|---|---|
| ||
<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