Frage: Was ist der Grund, warum mein Cron-Job nicht ausgeführt wird, wenn ich den Prozentsatz „%“ in meinem Cron-Job verwende? Wie kann dieses Problem gelöst werden?
Antwort: ‘%’ ist der neue Zeilenbezeichner im Cron-Befehl. Wenn Sie also % verwenden, wird dies als neue Zeile im Cron-Job interpretiert. Sehen wir uns an, wie wir dieses Problem lösen können, und verwenden Sie % im Cron-Job.
Problemdefinition mit Beispiel:„%“ im Cron-Job (nicht erfolgreicher Cron-Job)
* * * * * date +"%d" >> /tmp/non-working-ex1.txt
Zu Testzwecken haben alle Felder im obigen Crontab-Beispiel * darin. Dadurch wird der angegebene Cronjob jede Minute ausgeführt.
Um die crontab-Konfiguration zu verstehen, lesen Sie unseren früheren Artikel, der 15 fantastische Cron-Job-Beispiele enthält.
Wenn Sie Zugriff auf Syslog haben, sehen Sie eine ähnliche Zeile wie die folgende.
Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")
Im Syslog-Eintrag für dieses spezifische Beispiel wird der Befehl nur als:(date +”) angezeigt . Idealerweise sollte dies wie folgt angezeigt werden:date +”%d” . Dies zeigt an, dass der Prozentsatz als spezielles Symbol im Cron geparst wird. d.h. es beendet den Befehl genau bei %age.
Lösung mit Beispiel:Arbeiten Sie umher, um „%“ im Cron-Job zu verwenden.
Sie können dieses Problem mit den folgenden zwei Methoden lösen. Diese Lösung sollte das Problem auf allen Varianten von Unix/Linux lösen, einschließlich Ubuntu, Debian, Fedora, RedHat, CentOS, AIX usw.,
Methode 1:Escapezeichen für den Prozentsatz mit \
Sie können den Prozentsatz mit einem Backslash maskieren und ihn wie einen normalen Job arbeiten lassen.
$ crontab -l * * * * * date +"\%M" > /tmp/working-ex1.txt
Hinweis: Dieses „\“ wird nicht vom Datumsbefehl oder einem anderen von Ihnen aufgerufenen Befehl gesehen. Das \ soll dem speziellen Verhalten von Prozent in Cron entkommen.
Methode 2:Shell-Skript verwenden
Erstellen Sie ein Shell-Skript mit dem Prozentbefehl und planen Sie das Shell-Skript als Cron-Job ein.
$ cat /bin/date.sh date +"%d" $ crontab -l * * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt
In der nächsten Minute wird der ausgeführte Befehl in der /tmp/working-ex2.txt
ausgegeben
Jetzt haben Sie die folgende Zeile, die den Befehl erfolgreich im Syslog ausgeführt hat.
Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)
Hinweis: Vergessen Sie nicht, diese Test-Cron-Einträge zu entfernen, da sie jede Minute ausgeführt werden.
Wenn Sie ein anderes Problem mit der Crontab hatten, teilen Sie uns dies im Kommentarbereich mit.