Crontab - Im Verzeichnis ausführen

170

Ich möchte einen Job festlegen, der täglich in der Root-Crontab ausgeführt wird. Ich möchte jedoch, dass es von einem bestimmten Verzeichnis aus ausgeführt wird, damit es alle benötigten Dateien finden kann, da die Anwendung eine Reihe relativer Pfade hat.

Wie auch immer, kann ich crontab anweisen, von einem bestimmten Verzeichnis aus auszuführen?

user333746
quelle

Antworten:

318

Alle Jobs werden von einer Shell ausgeführt. Starten Sie das Shell-Snippet also mit einem Befehl, um das Verzeichnis zu ändern.

cd /path/to/directory && ./bin/myapp

In Bezug auf die Verwendung von &&statt ;: Normalerweise macht es keinen Unterschied, aber wenn der cdBefehl fehlschlägt (z. B. weil das Verzeichnis nicht existiert), wird &&die Anwendung nicht ausgeführt, während ;sie ausgeführt wird (jedoch nicht im vorgesehenen Verzeichnis) ).

Gilles 'SO - hör auf böse zu sein'
quelle
Anstatt eine meist doppelte Antwort hinzuzufügen, möchte ich nur hinzufügen, dass Sie auswählen können, welche Shell (wenn Sie beispielsweise Bash anstelle von Sh benötigen), indem Sie SHELLin Ihrer Crontab festlegen.
Edd Steel
12
+1. Die Lösung jeder anderen verwandten Frage besteht darin, das Skript mit absoluten Pfaden neu zu schreiben. Das ist genau das, was ich brauchte
Conrad.Dean
2
Könnten Sie aus Neugier ein Semikolon ;anstelle des doppelten kaufmännischen Und verwenden &&oder würde das nicht funktionieren? Und warum?
Joshua Pinter
32
@JoshPinter Normalerweise macht es keinen Unterschied. Wenn der cdBefehl jedoch fehlschlägt (z. B. weil das Verzeichnis nicht vorhanden ist), &&wird die Anwendung mit nicht ausgeführt. Mit ;wird es ausgeführt (aber nicht im vorgesehenen Verzeichnis).
Gilles 'SO - hör auf böse zu sein'
1
Ich werde dies für alle Cron-Jobs meiner Apps tun. Sie haben mich vor dem Ändern meiner Quelldateien bewahrt. Vielen Dank
Buchhalter م