Einen Cronjob im Docker A Anfängerführer ausführen

Einen Cronjob im Docker A Anfängerführer ausführen

Wenn es darum geht, Jobs und Programme zu planen, die automatisch in festgelegten Intervallen ausgeführt werden oder von einem anderen Ereignis ausgelöst werden können, haben Sie zahlreiche Optionen. Sie können ein allgemeines Dienstprogramm wie Cron, den integrierten Scheduler in MacOS oder Linux oder ein spezielles Tool wie AWS Lambda verwenden. Cron, obwohl nicht so leistungsfähig wie AWS Lambda, ist eine solide Wahl, wenn Sie Container verwenden, da es für Hintergrundaufgaben auf UNIX -Systemen ausgelegt ist. Mit Docker werden die Dinge jedoch etwas schwieriger, da Sie nicht einfach eine neue Cron -Instanz von Ihrem Terminal aus starten und erwarten können, dass es funktioniert.

Wie man einen Cron -Job doktiert

Um einen Cron -Job in einem Docker -Container auszuführen, müssen Sie den Cron -Service verwenden und in Ihrem Docker -Container im Vordergrund ausführen.

Hier ist ein Beispiel dafür, wie Sie dies einrichten können:

  1. CRON -Datei erstellen:
  2. Erstellen Sie eine Datei, die alle Cron -Jobs enthält, die unter dem Docker -Container ausgeführt werden sollen. Nennen wir beispielsweise diese Datei "Cron".

    Katzencron  

    Unsere Beispieldatei sieht aus:

    Cron * * * * * Echo "Das aktuelle Datum ist 'Datum'">/var/log/cron 

    Fügen Sie alle Crontab -Jobs in der obigen Datei hinzu, die unter dem Docker -Container ausgeführt werden müssen.

  3. Erstellen Sie Dockerfile
  4. Als nächstes erstellen Sie eine "Dockerfile" Das installiert den Cron -Dienst und kopiert das Skript in den Container. Hier haben wir 3 Beispiele für Dockerfile mithilfe des verschiedenen 2-Betriebssystems geliefert. Das Alpine Linux ist sehr leicht und reicht aus, um Cronjobs zu laufen. Aber wenn Sie andere Umgebungen Linux Ubuntu, Apache und PHP einrichten müssen. Wählen Sie eine der unten angegebenen Dockerfile -Vorlagen anhand Ihrer Anforderungen aus.

    • Dockerfile mit Alpine Linux
    • Von Alpine: 3 # CRON -Datei in den Container kopieren Cron /etc /cron kopieren.D/Cron # Geben Sie den Berechtigungslauf Chmod 0644/etc/cron.D/Cron # Fügen Sie den Cron Job Run Crontab/etc/cron hinzu.D/Cron # Link Cron-Protokolldatei zu stdout ln -s/dev/stdout/var/log/cron # Führen Sie den Cron-Dienst im Vordergrund CMD ["Crond", "-l", "2", "-f "]]
      12345678910111213141516Von Alpine: 3 # CRON -Datei in den Containercopy Cron /etc /cron kopieren.D/Cron # Geben Sie die Berechtigte Chmod 0644/etc/cron an.D/Cron # Fügen Sie den Cron Jobrun Crontab/etc/cron hinzu.D/Cron # Link Cron-Protokolldatei zu StDoutrun ln -S/dev/stdout/var/log/cron # Führen Sie den Cron-Dienst im Vordergrundcmd ["Crond", "-l", "2", "-f"] aus

    • Dockerfile mit Apache und PHP
    • Von PHP: 8.0 -APache # Installieren Sie Cron Run APT -Update && \ APT -y -y CRON # CRON CRON -Datei in den Container Kopieren von Cron /etc /cron kopieren.D/Cron # Geben Sie den Berechtigungslauf Chmod 0644/etc/cron.D/Cron # Fügen Sie den Cron Job Run Crontab/etc/cron hinzu.D/Cron # Link Cron -Protokolldatei zu stdout ln -s/dev/stdout/var/log/cron # starten cron service run sed -i 's/^exec/service cron start \ n \ nexec/'/usr/ Lokal/bin/apache2-vorirdisch
      1234567891011121314151617181920Von PHP: 8.0 -APache # Installieren Sie Cronrun APT Update && \ apt -y -Installieren Sie die Cron # CRON -Datei in den Containercopy Cron /etc /cron kopieren.D/Cron # Geben Sie die Berechtigte Chmod 0644/etc/cron an.D/Cron # Fügen Sie den Cron Jobrun Crontab/etc/cron hinzu.D/Cron # Link Cron -Protokolldatei zu StDoutrun ln -s/dev/stdout/var/log/cron # starten cron servicerun sed -i Bin/Apache2-Forground

    • Dockerfile mit Ubuntu Linux
    • Von Ubuntu: Neueste # Installieren Sie Cron Deamon APT APT Update && APT Install -y Cron # Kopieren Sie die Cron -Datei in die Container Cron /etc /cron kopieren.D/Cron # Geben Sie den Berechtigungslauf Chmod 0644/etc/cron.D/Cron # Fügen Sie den Cron Job Run Crontab/etc/cron hinzu.D/Cron # Link Cron -Protokolldatei zu stdout ln -S/dev/stdout/var/log/cron # Führen Sie den Cron -Dienst im Vordergrund CMD ["Cron", "-f"] aus
      12345678910111213141516171819Von Ubuntu: Neueste # Installieren Sie Cron Deamonrun APT Update && APT Install -y -Cron # CRON CRON -Datei in den Containercopy Cron /etc /cron kopieren.D/Cron # Geben Sie den Berechtigungslauf Chmod 0644/etc/cron.D/Cron # Fügen Sie den Cron Jobrun Crontab/etc/cron hinzu.D/Cron # Link Cron -Protokolldatei zu StDoutrun ln -S/dev/stdout/var/log/cron # Führen Sie den Cron -Dienst im Vordergrundcmd ["Cron", "-f"] aus

  5. Container bauen und ausführen
  6. Sie haben zwei Dateien in Ihrem aktuellen Verzeichnis. Einer ist 'Cron', der die Cronjobs enthält, und der zweite ist Dockerfile, das die Build -Anweisungen für Docker enthält. Führen Sie den folgenden Befehl aus, um das Docker -Bild mit der Dockerfile zu erstellen:

    Docker Build -t my_cron .  

    Sobald das Bild erfolgreich erstellt wurde, können Sie einen Container mit dem Bild starten:

    Docker run -d my_cron  

    Dadurch wird der Cron -Daemon unter dem Container gestartet, wodurch alle geplanten Jobs definiert werden "Cron" Datei.

  7. Versuchsaufbau
  8. Die Cronjobs sollten erfolgreich mit den Docker -Containern konfiguriert werden. Da wir die Cron -Protokolldatei (/var/log/cron) mit/dev/stdout verknüpft haben. Zeigen Sie alle vom Cron -Service erzeugten Protokolle "Docker -Protokolle" Befehl.

    Suchen Sie zunächst die Container -ID oder den Namen mit dem Namen mit 'Docker PS' Befehl.

    Docker PS  

    Überprüfen Sie dann die Protokolldateien des Docker -Containers.

    Docker Protokolle container_id 

    In den Cronjobs habe ich das aktuelle Datum gedruckt und es in Protokolle geschrieben. Sie können das folgende Bild sehen, das das aktuelle Datum in Protokollen jede Minute anzeigt.

    Cronjobs in Docker laufen

    Dies bedeutet, dass die Cron -Jobs ordnungsgemäß unter dem Docker -Container laufen.

Einpacken

Cron Jobs sind eine praktische Möglichkeit, tägliche Aufgaben auf Ihrem Computer zu automatisieren, z. B. das Sichern von Dateien. Mit Docker werden die Dinge jedoch ein wenig schwieriger. Wenn Sie einen Cron -Job in einem Docker -Container ausführen, stoßen Sie einige Herausforderungen, je nachdem, wie und wo Sie den Container ausführen möchten. Das Cron -Jobintervall ist in Sekunden spezifiziert und kann zwischen einer Minute bis zu etwas mehr als 100 Jahren reichen. Die Häufigkeit von Cron -Jobs wird in Bezug auf die Häufigkeit angegeben, mit der der Cron -Job täglich ausgeführt werden sollte.

Wenn es darum geht, Jobs und Programme zu planen, die automatisch in festgelegten Intervallen ausgeführt werden oder von einem anderen Ereignis ausgelöst werden können, haben Sie zahlreiche Optionen. Sie können ein allgemeines Dienstprogramm wie Cron, den integrierten Scheduler in MacOS oder Linux oder ein spezielles Tool wie AWS Lambda verwenden. Cron, obwohl nicht so leistungsfähig wie AWS Lambda, ist eine solide Wahl, wenn Sie Container verwenden, da es für Hintergrundaufgaben auf UNIX -Systemen ausgelegt ist. Mit Docker werden die Dinge jedoch etwas schwieriger, da Sie nicht einfach eine neue Cron -Instanz von Ihrem Terminal aus starten und erwarten können, dass es funktioniert.