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

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"


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.