Ich wollte wissen, wie ich einen separaten Cron-Job-Container in meinem Docker Swarm konfiguriere, um Cron-Jobs in einem separaten Prozess/Container auszuführen. Ich möchte einiges Wissen zusammenfassen, das ich in mehreren Posts gesammelt habe, bis ich alle meine Cron-Jobs in Docker Swarm zum Laufen gebracht habe. Bitte fügen Sie Verbesserungen in Kommentaren hinzu oder bearbeiten Sie sie direkt, wenn Sie können.
Dies wurde mit Docker 17.04 und einem Debian:Jessie-Container für Cron-Jobs getestet.
Antwort1
bauen
Docker-Dateifür den Cron-Job-Container, installiert Cron, startet den Cron-Dienst beim Start des Containers und hält den Container dann mit dem Tail-Befehl am Laufen
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
Komposition
docker-compose.yml
services:
cron:
image: debian:jessie
volumes:
- mycronjobs:/etc/cron.d
Auftragsdateien
Legen Sie im Stammverzeichnis Ihres Projekts einen Ordner mit Ihren Cron-Jobs an (verwenden Sie in Dateinamen nur Unterstriche für Sonderzeichen).
me@machine:/projectdir$ ls -al
-rw-rw-r-- 1 me me 978 Apr 26 17:49 docker-compose.yml
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 Dockerfile
drwxrwxr-x 6 me me 4096 Apr 26 16:57 mycronjobs
me@machine:/projectdir$ ls -al mycronjobs
-rw-rw-r-- 1 me me 978 Apr 26 17:49 job-dash-bad
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 job_underscore_good
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 check_running
Stellenbeschreibung
Sie können Cron-Jobs in
/var/spool/cron/crontabs/mycrontabdie über das CLI-Tool erstellt werden$ crontab/ auch bekannt als Benutzer-Crontabs
/etc/crontabsDas ist eine systemweite Sammlung von Crontabs
- '* * * * *' root /bin/touch /projectdir/system_crontab_works # ohne 's
- /etc/cron.dailyDies ist ein Ordner mit einfachen Bash-Skripten, die täglich ausgeführt werden
- /etc/cron.dDies ist ein Ordner, der systemweite Cron-Jobs in Dateien ähnlich wie/etc/crontabs. Dateien dürfen keine Bindestriche enthalten, nur Unterstriche
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # ohne 's
- sudo chown root:root /etc/cron.d/system_cron