Antworten:
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:$PATH
nichts Nützliches tun).
Dies ist in der Dokumentation angegeben, die Sie durch Ausführen sehen können
man 5 crontab
(Beachten Sie, dass man crontab
die Dokumentation des crontab
Befehls in Abschnitt 1 des Handbuchs angezeigt wird. Sie möchten die Dokumentation des crontab
Dateiformats in Abschnitt 5.)
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"
.
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 -c
oder die Shell SHELL
auf 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/sh
normalerweise /bin/bash
so $( ... )
, aber nicht auf älteren Systemen, auf denen /bin/sh
nur 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+m
wie date +\%Y\%m
oben geschrieben.
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?