Ist es möglich, Variablen in crontab -e zu verwenden?


13

Kann ich sagen:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

in crontab -e?

Ist es möglich, Variablen in zu verwenden crontab -e?

Antworten:


15

Ja, Sie können auf diese Weise Variablen definieren und verwenden. Es gibt eine Einschränkung (die Sie in Ihren Beispielen nicht getroffen haben): Die Zeichenfolge rechts neben dem =Zeichen wird wörtlich interpretiert, wobei führende Leerzeichen entfernt werden, sodass Sie keine Konstrukte wie verwenden können FOO=$BAR/qux(z. B. PATH=$HOME/bin:$PATHnichts Nützliches tun).

Dies ist in der Dokumentation angegeben, die Sie durch Ausführen sehen können

man 5 crontab

(Beachten Sie, dass man crontabdie Dokumentation des crontab Befehls in Abschnitt 1 des Handbuchs angezeigt wird. Sie möchten die Dokumentation des crontab Dateiformats in Abschnitt 5.)


7

Ich habe es gerade versucht, ja, es ist möglich. Sie können es mit diesem einfachen Beispiel herausfinden, setzen Sie dies in Ihre crontab:

FOO = QWERTY
* * * * * echo $ FOO> ~ / out

Und überprüfen Sie die Datei ~/out(jede Minute aktualisiert), die sie enthalten sollte "qwerty".


2
+1, um zu zeigen, wie das OP ähnliche Dinge selbst herausfinden kann.
Arthaey

In einem besseren Beispiel wird $ FOO im Zielskript verwendet.
Acumenus

4

Während Linux-Crontabs das Definieren einiger Variablen unterstützen, die Literalwerte enthalten, ist es nicht sinnvoll, Langtext auf eine kürzere Darstellung zu komprimieren oder einige Dinge über Cron selbst zu steuern, z. B. wohin E-Mail-Ausgaben gesendet werden sollen.

Die Flexibilität besteht darin, zu verstehen, dass der Befehlsteil des Cron-Eintrags an Systeme übergeben /bin/sh -coder die Shell SHELLauf Systemen definiert wird , die Vixie Cron verwenden (das normalerweise auf Linux-Systemen installiert ist). Dies bedeutet, dass der Rest der Befehlszeile ein einfaches Shell-Skript ist. HINWEIS: Stellen Sie fest, welche Shell verwendet wird. Unter Linux funktioniert der eingebettete Befehl /bin/shnormalerweise /bin/bashso $( ... ), aber nicht auf älteren Systemen, auf denen /bin/shnur verstanden `wird.

Zum Beispiel habe ich eine einfache Crontab-Zeile, die eine MBX-Datei mit gespeicherten Nachrichten monatlich archiviert und komprimiert. Es sieht aus wie das:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf

Dies wird am ersten eines jeden Monats um 00:15 Uhr ausgeführt, ein neuer Dateiname mit CCYYMM festgelegt, die aktuelle Datei auf einen neuen Namen verschoben und komprimiert. Beachten Sie, dass ein nicht entkuppeltes %(Prozentzeichen) als Zeilenumbruch behandelt wird und die darauf folgenden Daten als stdin an den Befehl vor dem Prozentzeichen gesendet werden. Deshalb wird das Normale date +Y+mwie date +\%Y\%moben geschrieben.


-2

Nein, ein Cronjob kann nicht nur Cron-Artikel enthalten. Ist es nicht eine Option, ein Bash-Skript zu erstellen und das Bash-Skript über einen Cronjob auszuführen?


1
Richtig auf einigen anderen Unices, aber Linux Cron unterstützt die Zuweisung von Umgebungsvariablen.
Gilles 'SO - hör auf böse zu sein'
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.