Re: Running DBI, ODBC in the crontab



Run the following lines in both the command line and crontab:

perl -MData::Dumper -e' print Dumper @INC' >~/inc.log
env|sort >~/env.log

The first will have output that looks something like this:


perl -MData::Dumper -e' print Dumper @INC'
$VAR1 = '/usr/lib/perl5/5.8.7/i586-linux-thread-multi';
$VAR2 = '/usr/lib/perl5/5.8.7';
$VAR3 = '/usr/lib/perl5/site_perl/5.8.7/i586-linux-thread-multi';
$VAR4 = '/usr/lib/perl5/site_perl/5.8.7';
$VAR5 = '/usr/lib/perl5/site_perl';
$VAR6 = '/usr/lib/perl5/vendor_perl/5.8.7/i586-linux-thread-multi';
$VAR7 = '/usr/lib/perl5/vendor_perl/5.8.7';
$VAR8 = '/usr/lib/perl5/vendor_perl';
$VAR9 = '.';

Ignoring the "$VARn =" stuff, compare what is in the outputs on the command
line and on the crontab output. Any of the paths that are missing in cron
should be added in cron. There are a number of ways to do that, but what I
suggest is creating a .setenv.sh (or some name that makes sense to you) and
add the variables to your environment (PERL5LIB) by sourcing that file as
part of your cron command line.

Another way is to add the lines to the top of your crontab:

PERL5LIB=<colon separated list of missing directories>
LD_LIBRARY_PATH=<what ever it is in the `env` output below>

If you use the setenv.sh method:

0 0 * * * /home/jeff/bin/jeffsscript.pl
becomes:
0 0 * * * cd /home/jeff/bin/ ; . .setenv.sh ; /home/jeff/bin/jeffsscript.pl

If you add it to your crontab, then your crontab looks something like this:
PERL5LIB=<colon separated list of missing directories>
LD_LIBRARY_PATH=<what ever it is in the `env` output below>
0 0 * * * /home/jeff/bin/jeffsscript.pl

It's important to remember though that these variables get set for
everything that runs in this crontab if you do it this way, although they
can be overridden using the first method.



The differences between the cron execution of env and the command line will
be huge.

On my linux box env from the command line spits out 83 lines. From cron it
is 10, and that includes some that I have added in. Most notably absent are
things like PERL5LIB and all of my ORACLE* variables. Anything that might
help can be added in using one of the methods above.



On 4/11/06, Stephen.Chung@xxxxxxx <Stephen.Chung@xxxxxxx> wrote:

Hi,

I am running a perl script, using DBI and ODBC (from DataDirect), on a
linux box to connect to SQL server. It works fine if I run it from a shell
command line.

However, if I put it into a crontab (the same user), I got the following
error:

install_driver(ODBC) failed: Can't load
'/QRT/ODBC/perlModule/myInstall/lib/auto/DBD/ODBC/ODBC.so' for module
DBD::ODBC: libstdc++.so.5: cannot open shared object file: No such file or
directory at /sbcimp/run/pd/perl/5.8.3/lib/DynaLoader.pm line 229.

at (eval 1) line 3
Compilation failed in require at (eval 1) line 3.
Perhaps a required shared library or dll isn't installed where expected

The failure is at the line

$dbh = DBI->connect

Here is what I tried to diagnosis.

0. if I do "ldd /QRT/ODBC/perlModule/myInstall/lib/auto/DBD/ODBC/ODBC.so"
from a shell command, there is a clear path associated with libstdc++.so.5

1. I checked (by printing out the environment variable's LD_LIBRARY_PATH
within my perl script) the LD_LIBRARY_PATH, the path for item 0 is there.

2. if I repeat the item 0 within the perl script (when running in the
crontab), the output indicates the library (ODBC.so) is fine with correct
linkage.

Every debugging output looks normal, and I just could not find the
problem…

It will be greatly appreciated if some expert can share his experience
with me.

Many thanks.

Best,

Stephen Chung



This communication is issued by UBS AG or an affiliate ("UBS") by the
Sales or Trading Department to institutional investors only and is
not research. It is for informational purposes and is not an official
confirmation of terms. It is not guaranteed as to accuracy, nor is it
a complete statement of the financial products or markets referred
to. Opinions expressed are subject to change without notice and may
differ or be contrary to the opinions or recommendations of UBS
Investment Research or the opinions expressed by other business areas
or groups of UBS as a result of using different assumptions and
criteria. UBS may, as principal or agent, have position in,
underwrite, buy or sell, make a market in, or enter into derivatives
transactions in relation to any financial instrument or asset
referred to in this email. Unless stated specifically otherwise, this
is not a recommendation, offer or solicitation to buy or sell and any
prices or quotations contained herein are indicative only. UBS has
policies and procedures designed to minimise the risk that that
officers and employees are influenced by any conflicting interest or
duty and that confidential information is improperly disclosed or
made available. To the extent permitted by law, UBS does not accept
any liability arising from the use of this communication.
For additional information, please contact your local sales or
trading contact. (c) 2005 UBS. All rights reserved.
Intended for recipient only and not for further distribution
without the consent of UBS.




--
--------------------------------------------------------------------------------------------------------------
The darkest places in hell are reserved for those who maintain their
neutrality in times of moral crisis.
Dante Alighieri (1265 - 1321)

They who would give up an essential liberty for temporary security, deserve
neither liberty or security.
Benjamin Franklin
--------------------------------------------------------------------------------------------------------------


Relevant Pages

  • SUMMARY: cron entry: nth day of every month?
    ... cron can not handle this with its own syntax. ... 21st but "command" only runs if the output of the "date" command ... What I would suggest is rather than embedding the logic in each script ... The answer is it is _not_ possible to control it only with crontab ...
    (Tru64-UNIX-Managers)
  • Re: Cron job question
    ... > From: root@somedomain.nl (Cron Daemon) ... You've made the classic mistake of confusing the system crontab ... extra column defining which user ID the command should be run as. ... any new cron jobs for any user (including root) and leave the system ...
    (freebsd-questions)
  • Re: [opensuse] Re: cron problems
    ... The exception is when your crontab line starts ... your ipdetect cron job really works, you might want to turn off job start ... Your crontab syntax itself is OK, ... userid in it, before the command, has just the command. ...
    (SuSE)
  • Re: [SLE] rsync log
    ... If you type kcron you should get the ... What this means is the non-error output from a command like rsync prints ... the standard output of a cron job is emailed ... kcron is just a GIU way to specify your crontab ...
    (SuSE)
  • Re: GPG in crontab causes blank messages
    ... When I run my crontab command manually in terminal, ... But since the output of the script contains a big list of files, ... If I remove the GPG portion of the command, ...
    (comp.sys.mac.apps)