Linux: Wie man einen Befehl in einem bestimmten Verzeichnis ausführt

16

Ich möchte einfach nur einen Befehl (eigentlich ein Shell-Skript) aus einem bestimmten Verzeichnis als Cron-Job ausführen. Wie kann ich es laufen , so dass es ohne zu einem bestimmten Verzeichnis eingestellt ist cd.

Zombies
quelle

Antworten:

16

Ihre Frage macht wenig Sinn. Verwendencd . Wenn Sie die Antwort nicht verwenden cdmöchten, weil Sie sie ausprobiert haben und sie nicht funktioniert hat, haben Sie sie wahrscheinlich nicht richtig in die Crontab eingegeben.

Am einfachsten wäre es, ein kleines Shell-Skript zu schreiben, das Ihre Hauptaufgabe ausführt und dann das Skript erstellt.

Daenyth
quelle
1
Kann ich mit crontab mehrere Befehle in einen Job einfügen? Wenn nicht, müsste ich die CD [Pfad] harcode . Und der Pfad könnte sich ändern, was wirklich ärgerliche Bereitstellungsprobleme und auch die Dezentralisierung der Konfiguration zur Folge hat, die ich um jeden Preis vermeide.
Zombies
1
@Zombies: Ja, Sie können mehrere Befehle in einen Job einfügen (z. B. durch Semikolons trennen oder &&), aber Sie können auch ein separates Skript schreiben, das alle Befehle enthält, und den Pfad zum Skript einfach in cron einfügen, wie von Daenyth vorgeschlagen. Ihr Skript so etwas wie das Lesen Sie das Verzeichnis aus einer Konfigurationsdatei tun könnte , wenn Sie mögen - der Punkt ist, aber Sie den Verzeichnisnamen in das Skript erhalten möchten, es ist keine Entschuldigung , nicht zu verwenden cd.
David Z
Aha. Ich möchte CD direkt auf der Crontab verwenden, da ich sie, wenn ich sie in eine Datei schreibe, in jeder Datei bearbeiten muss, was zu heiklen / leicht zu unterbrechenden Konfigurationen führt.
Zombies
3
Und wenn Sie die CD in die Crontab-Datei einfügen, müssen Sie sie in jeder Crontab-Datei bearbeiten. Ich verstehe das Problem nicht. Vielleicht könnten Sie erklären, was Sie versuchen, vollständiger zu machen.
Garyjohn
Der andere Grund für das Ausführen eines Shell-Skripts aus der crontab-Datei besteht darin, sicherzustellen, dass die Umgebung korrekt eingestellt ist. Die Umgebung, die einem Cron-Job zugewiesen wird, ist normalerweise kaum oder nur minimal. Daher müssen Sie sie normalerweise auf eine benutzerfreundlichere Umgebung zurücksetzen.
Jonathan Leffler
60

Geben Sie einfach den Pfad zum Skript an. Keine Notwendigkeit für cd:

0 12 * * * /path/to/script args

Wenn Ihr Skript nach Dateien in sucht ., müssen Sie Folgendes verwenden cd:

0 12 * * * cd /some/dir && /path/to/script args
Bis auf weiteres angehalten.
quelle
2
Siehe auch serverfault.com/questions/290313/…
Will Sheppard,
4
&&, wie in der Antwort auf @WillSheppard verlinkt, wäre besser, als ;weil &&nur dann der nächste Befehl ausgeführt wird, wenn der vorherige Befehl erfolgreich war.
Max Heiber
1
@mheiber: behoben
bis auf weiteres angehalten.