GNU/Linux >> Tutoriels Linux >  >> Linux

Le script Cron ne s'exécute pas comme prévu à partir de crontab - Dépannage

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.."

CONSEIL  :Pour mieux dépanner l'exécution d'une entrée crontab, vous pouvez la modifier pour consigner la sortie dans un fichier, par exemple :

[* * * * *] /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.


Linux
  1. Bashscript fonctionne depuis Terminal mais pas depuis Crontab ?

  2. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  3. Comment exécuter un script Sh à partir d'un raccourci sur le bureau ?

  4. Problème Crontab :la tâche Cron ne fonctionne pas lors de l'utilisation d'un pourcentage

  5. Exécuter le script bash à partir de l'URL

Journal Crontab :comment enregistrer la sortie de mon script Cron

Exécuter le script Python via crontab

Définir une adresse IP statique si elle n'est pas obtenue à partir de DHCP (script)

fichier de création atomique s'il n'existe pas à partir du script bash

La correspondance de modèle ne fonctionne pas dans le script bash

la tâche cron ne s'exécute parfois pas