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?

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) ).


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 م
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.