Frage

Wenn Sie ein Skript mit cron ausgeführt wird, jede ausführbare Datei innerhalb aufgerufen werden, müssen Sie den vollständigen Pfad haben. Ich entdeckte diese versuchen zu laufen wondershaper , wenn viele Fehler zeigte, wenn es versucht, tc zu nennen. Also meine Frage ist, was der richtige Weg ist, dieses Problem zu überwinden?

Mögliche Lösungen:

  • cd zum ausführbaren Ordner und bereiten symbolische Links zu anderen ausführbaren dort genannt (nicht sicher, ob es funktioniert - niedrige Portabilität)
  • verwenden vollständige Pfade im Skript (es funktioniert - geringe Übertragbarkeit zwischen verschiedenen Distributionen)
  • Pfadvariablen mit den benötigten Pfade im Script exportieren (nicht sicher, ob es funktioniert)

Nun, vielen Dank im Voraus für jedermann zu helfen.

War es hilfreich?

Lösung

Variablen in Ihrem Cron-Job Deklarieren ist expliziter und leichter zu pflegen: alles, was Sie ändern müssen, ist in Ihrem Cron-Job enthalten sind, und Sie brauchen nicht mehrere Dateien zu übertragen, sollten Sie es auf ein anderes System verschieben

PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp

*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp

Andere Tipps

Wenn Sie auf Linux / bsd / mac sind, können Sie einige Umgebungsvariablen wie PATH direkt im crontab gesetzt, und damit sind Sie in der Regel gut zu gehen.

Wenn Sie auf Solaris sind, na ja, ich bete für Sie. Aber ich habe eine Antwort zu: ich in der Regel Quelle .profile vor der Ausführung etwas:

0 0 * * 0 . /home/myuser/.profile && cd /path && ./script

Wohlgemerkt, meine .profile Lasten .bash_profile und .bashrc. Nur sicher sein, was Datei, die Sie Quelle hat, was Sie brauchen.

Da cron nicht ausgeführt Login, .profile und / etc / profile werden nicht gelesen. Daher PATH darf nicht auf den Wert, den Sie erwarten, eingestellt werden. Ich würde entweder

  • gesetzt und export PATH auf einen entsprechenden Wert
  • verwenden vollständige Pfade im Script

Ihr Trick mit Symlinks annimmt. PATH ist in und scheint einfach nicht schön

Meine Empfehlung:

Stellen Sie alle Variablen in einer externen Datei. Ich benutze ‚process_name.env‘ Datei im Verzeichnis / etc / process_name oder ähnlichem. Stellen Sie sich ein Backup-Skript haben. Dann sind Sie:

  • Erstellen /etc/backup.env und alle Umgebungsvariablen für tun, um die „Sicherung“ Aufgabe benötigt setzen.
  • Ändern Sie bitte Ihre Backup-Skript und fügen Sie diese Zeile nach Shebang :

    . /etc/backup.env #There ist ein Punkt und ein Leerzeichen vor vollständigem Pfad zur Backup-Umgebung.

IMO dieser Ansatz ist besser als Variablen bei CRON Definitionen erklärt, weil:

  • Leicht zu pflegen. Bearbeiten Sie einfach eine Datei aus.
  • Einfache Konfiguration / zentrale Konfiguration wechseln:
    • Sie können mehrere .env für die Verwendung von Skripts in verschiedenen Situationen haben kann (zum Beispiel, betrachten Sie Backup-Speicherorte auf Ihrem .env haben, können Sie .env Lage als Argument übergeben und Ihre Cron-Job laufen täglich eine .env bietet mit wenige Standorte und wöchentlich mit verschiedenen Standorten durch einen anderen .env bietet, nur ein Beispiel).
  • Sie können Ihre .env Dateien in einer VCS wie SVN oder Git halten.
  • Viel einfach Ihre Skripte zu testen (es gibt keine Notwendigkeit, sie von cron ausführen).

Viele Grüße

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top