Warum ändert CD das aktuelle Verzeichnis in Crontab nicht?

Warum ändert CD das aktuelle Verzeichnis in Crontab nicht?

In der Crontab meines Benutzers auf einem CentOS-System habe ich so etwas:

58 12 * * * cd /home/joe/dev; echo `pwd` | logger

Dies gibt in /var/log/messages aus:

Feb 19 12:58:01 srv01 joe: /home/joe

Anstatt Folgendes auszugeben:

Feb 19 12:58:01 srv01 joe: /home/joe/dev

Warum bleibt das Verzeichnis bei der Ausgabe nicht erhalten pwd?

Antwort1

Folgendes sollte funktionieren:

58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)

Indem Sie die Befehle in Klammern setzen, sollten Sie sie alle dazu zwingen, in derselben Subshell ausgeführt zu werden.

Antwort2

Die Befehle werden unabhängig voneinander ausgeführt. Es ist also nicht dasselbe, als ob sie in derselben Shell/Umgebung ausgeführt werden. Sie wären wahrscheinlich besser beraten, ein Shell-Skript zu erstellen, das die gewünschten Befehle ausführt, und das Skript dann aus der Crontab aufzurufen.

Update: Das Obige war eine Vermutung und/oder eine vorgeschlagene Möglichkeit (wie ein Kommentar so knapp und aggressiv hervorhob). Also beschloss ich, es auf CentOS 6.6 zu testen und ... ich lag falsch ... Der folgende Crontab-Eintrag funktionierte ordnungsgemäß:

* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;

Das hätte also für Sie funktionieren sollen. Ich bleibe dabei, dass Sie am besten damit bedient sind, Skripte und nicht einzelne Befehle in Ihrer Crontab aufzurufen. Aber das ist eine Vorliebe (also seien Sie in den Kommentaren bitte nachsichtig).

Antwort3

Gemäßdiese Unix&Linux SE-Antwortkönnen Sie ;durch ersetzen &&, da verschiedene Cron-Versionen in unterschiedlichen Linux-Distributionen diese Art von Funktionalität unterschiedlich handhaben:

cd /home/joe/dev && echo `pwd` | logger

verwandte Informationen