Il problema
Esecuzione di uno script utilizzando il servizio cron, che viene eseguito normalmente dalla shell ma non mostra lo stesso comportamento durante l'esecuzione da crontab.
Causa principale
Una delle cause più frequenti per cui il lavoro crontab non viene eseguito correttamente è che un lavoro cron non viene eseguito nell'ambiente shell dell'utente. Un altro motivo può essere:non specificare il percorso assoluto dei comandi utilizzati nello script. Quando lo script viene eseguito manualmente, la variabile di ambiente come PATH può essere diversa da quando viene eseguito da cron. Quindi è sempre consigliabile includere nello script i percorsi assoluti dei comandi utilizzati.
Per questo motivo, tutte le variabili di ambiente per l'utente presenti in una normale shell non saranno disponibili durante l'esecuzione del lavoro cron a meno che non siano importate dallo script in modo esplicito.
Ad esempio, se la shell ha una variabile ORACLE_HOME definita e la include nella variabile d'ambiente PATH e lo script utilizza tali variabili, lo script verrà eseguito nella vendita, ma quando viene eseguito da crontab lo script non avrà alcuna conoscenza di tali variabili per impostazione predefinita.
La soluzione
Definisci o importa ORACLE_HOME e la variabile PATH completa nel file di script cron, come puoi vedere all'interno della shell utente di Oracle (oracle_user_shell> echo $PATH).
Una buona pratica è importare sempre l'ambiente utente all'inizio dello script script.sh con il comando:
#!/bin/bash . /home/oracle/.bashrc [rest of script]
Questo leggerà /home/oracle/.bashrc e importerà l'ambiente all'interno. A seconda dell'ambiente dell'utente, può anche essere /home/oracle/.bash_profile o altri file.
NOTA :C'è uno spazio tra il punto “.” e "/casa.."SUGGERIMENTO :per risolvere meglio l'esecuzione di una voce crontab, puoi modificarla per registrare l'output in un file, ad esempio:
[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1
Nota :Sostituisci [* * * * *] con i tempi di esecuzione corretti per il tuo caso.
È quindi possibile controllare /tmp/crontab_script_log.txt per l'output dell'esecuzione. Se qualche variabile non è definita o se lo script presenta altri errori, l'output renderà più facile trovare la causa del problema.