"Befehl nicht gefunden" beim Ausführen eines Skripts über cron

29

Ich möchte mein Skript in crontab ausführen, habe aber einige Probleme ...

In meinem Skript führe ich diesen Befehl aus:

db2 connect to myDB2

Dies funktioniert einwandfrei , wenn ich dies als db2inst1- Benutzer ausführe , aber wenn ich dieses Skript in db2inst1 crontab ausführe , erhalte ich Folgendes :

db2: befehl nicht gefunden.

Wie kann ich das lösen?

Wolfy
quelle

Antworten:

43

Um zu vermeiden, dass der absolute Pfad zu einem Befehl eingegeben werden muss, haben Shells die $PATHUmgebungsvariable eingeführt . Jedes Verzeichnis ist durch ein getrennt, :und die Suche erfolgt von links nach rechts. cronLöscht häufig die gesamte Umgebung, einschließlich dieser $PATHVariablen. Daher verhält sich das Skript in Ihrem Cron möglicherweise anders als in der Shell.

Verwenden Sie absolute Pfade

Führen Sie which db2als db2inst1Benutzer aus, um den vollständigen Pfad für das db2Programm abzurufen. Wenn die Ausgabe ist /usr/bin/db2, würde Ihr Cron-Befehl wie folgt aussehen:

/usr/bin/db2 connect to myDB2

Stellen Sie die PATH-Variable ein

Führen Sie echo "$PATH"als db2inst1Benutzer aus, um die $PATHVariable abzurufen, und stellen Sie sicher, dass diese Variable auch in Ihrem Cron-Skript verfügbar ist. Wenn die Ausgabe beispielsweise /usr/local/bin:/usr/bin:/binso wäre, würden Sie die nächste Zeile oben in Ihr Shell-Skript einfügen:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
quelle
8

Wie in https://askubuntu.com/a/23438/227839 beantwortet , sollten Sie PATHin Ihrem Shell-Skript Folgendes festlegen :

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

# rest of script follows

oder in der crontab-Datei, die für alle Cron-Jobs gilt:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Linh Dam
quelle
Danke, es war hilfreich!
Yamashiro Rion
3

Sie müssen definieren, was db2 und myDB2 sind, andernfalls müssen Sie den absoluten Speicherort von ' file ' oder ' application ' verwenden, die ausgeführt werden sollen.

Beispiel:

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