Newsgroup: it.comp.lang.perl
Titolo: DBD::Oracle & crontab

Ciao,
scusate la domanda a meta' strada tra unix e perl,
magari qualcuno di voi riesce ad aiutarmi.
Sto' lanciando in crontab uno script perl che utilizza il modulo in oggetto
ma ottengo il seguente errore:
install_driver(Oracle) failed: Can't load 
'/usr/local/lib/perl5/site_perl/5.8.7/sun4-solaris/auto/DBD/Oracle/Oracle.so' 
for module DBD::Oracle: ld.so.1: /usr/l
ocal/bin/perl: fatal: libnnz10.so: open failed: No such file or directory at 
/usr/local/lib/perl5/5.8.7/sun4-solaris/DynaLoader.pm line 230.
 at (eval 13) line 3
Compilation failed in require at (eval 13) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at /usr/download_pec/
download_pec.pl
 line 199
l' ambiente che mi ritrovo all' interno dello script perl e' il seguente:
env: HOME = /root
env: LOGNAME = root
env: ORACLE_HOME = /oracle/app/oracle/product/
10.2.0.3
env: LD_LIBRARY_PATH = /oracle/app/oracle/product/
10.2.0.3
env: PATH = /usr/sbin:/usr/bin:/oracle/app/oracle/product/
10.2.0.3
env: SHELL = /usr/bin/sh
env: TNS_ADMIN = /oracle/app/oracle/product/
10.2.0.3
env: ORACLE_BASE = /oracle/app/oracle
env: TZ = MET
ed effetivamente la libreria necessaria e' nel path corretto:
ls -l /oracle/app/oracle/product/
10.2.0.3/libnnz10.so
-rwxr-xr-x   1 ora10g   oinstall 6135928 Dec 20 17:59 
/oracle/app/oracle/product/
10.2.0.3/libnnz10.so
naturalmente a riga di comando funziona tutto come deve, sapete consigliarmi 
qualcosa ?
Grazie
Andrea



In genere l'errore che faccio sempre e' confondere l'ambiente dal quale 
lancio gli script da riga di comando, con l'ambiente e l'utente che poi 
in effetti esegue il crontab.
Controlla le variabili di ambiente ed i path che hai settati da consolle 
e quelli che vedi dagli script eseguiti dal crontab.
Spero di esseri stato d'aiuto.
 Raffaello

> '/usr/local/lib/perl5/site_perl/5.8.7/sun4-solaris/auto/DBD/Oracle/
Guarda, qualsiasi cosa tu lanci dalla crontab, devi tenere presente che 
cron non è un utente di login, e quindi il processo che lancia il tuo 
script non ha quell'environment che caratterizza l'esecuzione di tutto 
ciò che esegui - pure con lo stesso utente - in modalità interattiva.
In generale, gli accorgimenti che può risultare utile seguire sono:
- path assoluti piuttosto che relativi
- bisogna impostare esplicitamente il valore ( i valori ) della 
variabile PATH o, in alternativa, il path completo degli eseguibili 
richiamati.
Per quanto riguarda PERL, se sussistono problemi,prova ad aggiungere una 
'use lib' con le directory che ti interessano.
Un saluto

 Un saluto
non capisco il motivo ma sembra che la variabile di ambiente LD_LIBRARY_PATH
non viene letta (le altre variabili settate all' interno dello script perl 
sono riconosciute correttamente,
ad esempio il TNSNAMES_ORA),
per cui ho risolto creando un link simbolico della libreria sotto /usr/lib,
grazie per i suggerimenti,
Andrea 

 line 230. at (eval 13) line 3
Fatti un file di testo tipo questo in cui metti tutte le variabili di 
ambiente di Oracle che ti servono:
---
# Oracle Settings
NLS_LANG=ITALIAN_ITALY.WE8ISO8859P1; export NLS_LANG
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle/database; export ORACLE_HOME
ORACLE_SID=CEL; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:.; 
export CLASSPATH
---
Poi nel file che esegui via cron metti all'inizio una riga
. /path/fileconfig
(è importante lo spazio dopo il punto)
Così anche lo script si segnerà tutte le variabili d'ambiente di cui hai 
bisogno (che evidentemente non ha).