Docker und Cron
4. August 2020Was mich dazu veranlasst hat, diesen Artikel zu schreiben, waren meine Erfahrungen mit Projekten, die Docker verwenden, aber nicht so, wie sie sollten. Verwenden Sie Docker und möchten Sie regelmäßige Aufträge mit Cron ausführen? In diesem Artikel beschreibe ich, wie man Cron in einem Docker-Container ausführt.
Ich hatte zum Beispiel ein Projekt, bei dem das Projekt nach einem Server-Neustart nicht mehr lief, und unter anderem lief Cron nicht mehr. Oder ein anderes Projekt, bei dem Cron nicht funktionierende Aufgaben ausführte, aber niemand wusste davon.
Wenn du gerade erst mit Docker anfängst, dann schau dir den Artikel Wie man mit Docker anfängt an.
Docker und Dienste
Docker ist die Virtualisierung von Containern.
Und wenn man es benutzt, dokumentiert man das Projekt auch selbst.
Um die Möglichkeiten und Vorteile der Container-Virtualisierung zu nutzen: Übersicht, Unabhängigkeit, Anpassbarkeit, horizontale Skalierung,
brauchen Sie nur ein Hauptprogramm (Dienst), das in jedem Container läuft.
Ein Programm kann mehrere Threads oder Prozesse haben.
So kann man sich beispielsweise einmal in einen Container einloggen und andere Programme ausführen, aber das Hauptprogramm wird
überwacht, um zu sehen, ob es läuft.
Indem man identische Container und Anwendungen laufen lässt, kann man horizontal skalieren und eine größere Leistung der Anwendung erreichen.
Eine Situation, in der neben dem Hauptprogramm ein weiterer Dienst (z.B. cron) im Container läuft, ist also falsch.
Docker-Bild
Das vorgefertigte Basis-Image führt nur einen Dienst aus.
Ja, es ist möglich, das Image so zu modifizieren, dass neben dem Hauptprogramm auch andere Programme (z.B. cron) automatisch gestartet werden,
aber wenn das sekundäre Programm nicht läuft, weiß die Laufzeitumgebung (Docker, Docker Swarm, Kubernetes) nichts von dem Problem, also
Sie auch nicht, es sei denn, Sie ändern die Anwendung oder den Container anderweitig.
Vor allem aber überwacht die Laufzeitumgebung so die laufenden Container - zum Beispiel Kubernetes.
Außerdem ist es unwahrscheinlich, dass ein gegebenes Lösungsdesign eine Skalierung ohne weitere Änderungen ermöglicht.
Ja, es wird Anwendungsfälle geben, in denen es angebracht ist, Cron im selben Container laufen zu lassen, aber das wird ein Fall sein, der von den
Besonderheiten der Anwendung/des Projekts abhängen.
Was ist Cron
Unter Cron versteht man die regelmäßige Ausführung von Programmen oder schreiben Konfigurationen, die typisch für Cron sind. Von der Implementierung her ist ein Cron ein Programm, das beim Start von Unix-Systemen automatisch läuft, ständig läuft und dann periodisch Aufgaben entsprechend der angegebenen Konfiguration ausführt.
Wie führe ich Cron-Jobs in Docker aus?
Um Cron in Docker laufen zu lassen, muss Cron installiert, ausgeführt und konfiguriert werden.Wenn wir cron in Docker laufen lassen, können wir von einem beliebigen Image starten, das entweder einfach oder bereits die notwendigen Komponenten. Sie installieren cron in dieses Image und konfigurieren das Docker-Image, um cron auszuführen.
Als nächstes ersetzen Sie die Datei /etc/crontab durch Ihre eigene Konfiguration für cron.
Die Dockerdatei für cron, basierend auf dem Basis-Debian-Image, könnte wie folgt aussehen:
FROM debian:buster MAINTAINER Bc. Josef Jebavý #cron RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \ && apt-get update && apt install cron curl wget jq -y && apt-get clean # andere Komponenten COPY crontab /etc/crontab CMD [ "/usr/sbin/cron","-f","-L /dev/stdout" ]
Das Ergebnis ist ein Image, von dem aus man einen Container startet, der einen Cron ausführt, der unabhängig von den anderen
Diensten/Applikationen ist.
Wenn cron abstürzt, werden Sie über den Absturz benachrichtigt und in der Regel wird der Container in Kubernetes automatisch neu gestartet.
Die resultierenden gruppierten Anwendungskomponenten sind dann so, dass viele separate Container verschiedene Teile der Anwendung ausführen können, einige mehrfach, und ein einziger separater Container, der Cron nebenher laufen lässt.
Sie können die Konfigurationsdatei für cron auch beim Start des Containers einbinden. Das ist zum Beispiel nützlich, wenn Sie die Konfiguration in einer Entwicklungsumgebung debuggen müssen, weil Sie dann nicht ständig einen neuen Container bauen und starten müssen. einen neuen Container bauen und starten.
Beispiel für eine Cron-Datei:
# crontab copy to docker SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PHP7=/usr/bin/php7.2 PHP5=/usr/bin/php5.6 # m h dom mon dow user Befehl 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etcocron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) * * * * * root date >> /var/www/html/log/cron-test.txt 1.31 * * * * root ( ${PHP5} /var/www/html/cron/10-update.php) >> /var/www/html/log/cron.log 2>&1
Benutzerdefinierte Lösungen
Da ein Programmierer ein Experte für Softwareentwicklung ist, sollte man die Erstellung von Containern und den Aufbau einer laufenden Produktionsumgebung Linux- und Docker-Experten überlassen.
Artikel zu einem ähnlichen Thema
VMware vs. Proxmox: Leistungsvergleich
GitLab CI/CD: Testautomatisierung und Anwendungsbereitstellung
VPS von VMware zu Proxmox migrieren
VMware-Lizenzierungsänderung
Ausführen von Microsoft SQL Server unter Linux
Sicherung: der Proxmox Backup Server
Linux als Router und Firewall
Hochladen eines Docker-Images in die Docker-Registry
Linux: Verwaltung logischer Datenträger
Linux-Software-RAID
Ausführen einer Webanwendung hinter einem Proxy
Migration von Postfächern
Mehrstufige Docker-Erstellung
Sichern Ihrer Daten durch Einschalten des Computers
Podman
Importieren von Windows in die Proxmox-Virtualisierung
Docker und PHP-Mail
Proxmox-Virtualisierung
Lenovo ThinkPad X1 Carbon: Inbetriebnahme des LTE-Modems EM7544
Yocto-Projekt: Erstellen eines eigenen Betriebssystems für eingebettete Geräte
Vorbereiten eines Linux-Servers für die Ausführung einer Webanwendung in Python
Wie man eine schlechte Dateifreigabeleistung in Docker behebt
Wie man Docker richtig einsetzt
Installation von Linux auf einem dedizierten HPE ProLiant DL320e Server
Wie man eine Webanwendung einem Belastungstest unterzieht
Warum das JFS-Dateisystem verwenden
Booten von einer 4TB-Festplatte mit GTP unter UEFI
Btrfs-Dateisystem
Raspberry PI
WINE - Ausführen von Windous Programmen unter Linux
GNU/Linux-Betriebssystem
Newsletter
Wenn Sie daran interessiert sind, gelegentlich Neuigkeiten per E-Mail zu erhalten.
Sie können sich registrieren, indem Sie Ihre E-Mail-Adresse eingeben
News-Abonnement.
+