Le problème
Exécution d'un script à l'aide du service cron, qui s'exécute normalement à partir du shell mais ne présente pas le même comportement lorsqu'il est exécuté à partir de crontab.
Cause fondamentale
L'une des causes les plus fréquentes de l'exécution incorrecte de la tâche crontab est qu'une tâche cron ne s'exécute pas dans l'environnement shell de l'utilisateur. Une autre raison peut être - ne pas spécifier le chemin absolu des commandes utilisées dans le script. Lorsque le script est exécuté manuellement, la variable d'environnement telle que PATH peut être différente de celle lors de l'exécution à partir du cron. Il est donc toujours recommandé d'inclure les chemins absolus des commandes utilisées dans le script.
Pour cette raison, toutes les variables d'environnement de l'utilisateur qui sont présentes dans un shell normal ne seront pas disponibles pendant l'exécution de la tâche cron à moins qu'elles ne soient importées explicitement par le script.
Par exemple, si le shell a une variable ORACLE_HOME définie et l'inclut dans la variable d'environnement PATH et que le script utilise ces variables, le script s'exécutera dans la vente, mais lors de l'exécution à partir de crontab, le script n'aura aucune connaissance de ces variables par défaut.
La solution
Définissez ou importez ORACLE_HOME et la variable PATH complète dans le fichier de script cron, comme vous le voyez dans le shell utilisateur oracle (oracle_user_shell> echo $PATH).
Une bonne pratique consiste à toujours importer l'environnement utilisateur au début du script script.sh avec la commande :
#!/bin/bash . /home/oracle/.bashrc [rest of script]
Cela lira le /home/oracle/.bashrc et importera l'environnement à l'intérieur. Selon l'environnement de l'utilisateur, il peut également s'agir de /home/oracle/.bash_profile ou d'autres fichiers.
REMARQUE :Il y a un espace entre le point "." et "/maison.."
[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1
Remarque :Remplacez [* * * * *] par les temps d'exécution corrects pour votre cas.
Vous pouvez ensuite vérifier /tmp/crontab_script_log.txt pour la sortie de l'exécution. Si des variables ne sont pas définies ou si le script contient d'autres erreurs, la sortie facilitera la recherche de la cause du problème.