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