«Commande introuvable» lors de l'exécution d'un script via cron

29

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 lorsque je l'exécute en tant qu'utilisateur db2inst1 , mais lorsque j'exécute ce script dans db2inst1 crontab , j'obtiens ceci:

db2: commande introuvable.

Comment puis-je résoudre ça?

Wolfy
la source

Réponses:

43

Pour éviter d'avoir à taper le chemin absolu d'une commande, les shells ont introduit la $PATHvariable d'environnement, chaque répertoire est séparé par un :et les recherches se font de gauche à droite. cronefface souvent tout l'environnement, y compris cette $PATHvariable. 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 en which db2tant db2inst1qu'utilisateur pour obtenir le chemin complet du db2programme. Si la sortie est /usr/bin/db2, votre commande cron ressemblerait à:

/usr/bin/db2 connect to myDB2

Définissez la variable PATH

Exécutez en echo "$PATH"tant db2inst1qu'utilisateur pour obtenir la $PATHvariable 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 mettriez la ligne suivante en haut de votre script shell:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
la source
8

Comme répondu dans /ubuntu//a/23438/227839 , vous devez définir PATHdans votre script shell:

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

# rest of script follows

ou dans le fichier crontab, qui s'appliquera à toutes les tâches cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Barrage de Linh
la source
Merci, c'était utile!
Yamashiro Rion
3

Vous devez définir ce que sont db2 et myDB2 , sinon utilisez l'emplacement absolu de « fichier » ou « application » qui veulent s'exécuter.

Exemple:

/bin/rm /home/ubuntu/a.txt
Mahmudin Ashar
la source