web-dev-qa-db-fra.com

"commande introuvable" lors de l'exécution d'un script via cron

Je veux exécuter mon script dans crontab, mais j'ai quelques problèmes ...

Dans mon script, j'exécute cette commande:

db2 connect to myDB2

Cela fonctionne bien quand je lance ceci en tant que db2inst1 utilisateur, mais quand je lance ce script dans db2inst1 crontab, je reçois ceci:

db2: commande introuvable.

Comment puis-je résoudre ça?

24
Wolfy

Pour éviter d'avoir à taper le chemin absolu d'une commande, les shells ont introduit la variable d'environnement $PATH, chaque répertoire est séparé par un : et les recherches sont effectuées de gauche à droite. cron efface souvent tout l'environnement, y compris cette variable $PATH. Par conséquent, le script peut se comporter différemment dans votre cron par rapport au comportement dans le shell.

Utiliser des chemins absolus

Exécutez which db2 en tant qu'utilisateur db2inst1 pour obtenir le chemin complet du programme db2. Si le résultat est /usr/bin/db2, votre commande cron ressemblerait à ceci:

/usr/bin/db2 connect to myDB2

Définir la variable PATH

Exécutez echo "$PATH" en tant qu'utilisateur db2inst1 pour obtenir la variable $PATH et assurez-vous que cette variable est également disponible dans votre script cron. Par exemple, si la sortie était /usr/local/bin:/usr/bin:/bin, vous placeriez la ligne suivante en haut de votre script Shell:

export PATH="/usr/local/bin:/usr/bin:/bin"
40
Lekensteyn

Comme indiqué dans https://askubuntu.com/a/23438/227839 , vous devez définir PATH dans votre script Shell:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

ou dans le fichier crontab, qui s'appliquera à tous les travaux cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
5
Linh Dam

Vous devez définir ce que db2 et myDB2, sinon utilisez l'emplacement absolu du fichier '' ou ' application ' qui veut s'exécuter.

Exemple:

/bin/rm /home/ubuntu/a.txt
3
Mahmudin Ashar