Prowadzenie cronjob w Docker przewodnik dla początkujących

Prowadzenie cronjob w Docker przewodnik dla początkujących

Jeśli chodzi o planowanie zadań i programów, które automatycznie działają w ustalonych odstępach czasu lub mogą być wywołane przez inne wydarzenie, masz mnóstwo opcji. Możesz użyć narzędzia ogólnego przez. Cron, choć nie tak potężny jak AWS Lambda, jest solidnym wyborem, jeśli używasz pojemników, ponieważ jest zaprojektowany do obsługi zadań w tle w systemach Unix. Jednak z Dockerem sprawy stają się trochę trudniejsze, ponieważ nie możesz po prostu uruchomić nowej instancji Cron z terminala i oczekiwać, że zadziała.

Jak dokeryzować pracy cron

Aby uruchomić zadanie cron w kontenerze Docker, musisz użyć usługi CRON i uruchomić ją na pierwszym planie w kontenerze Docker.

Oto przykład, w jaki sposób możesz to skonfigurować:

  1. Utwórz plik CRON:
  2. Utwórz plik, który zawiera wszystkie zadania CRON, które mają być uruchamiane w kontenerze Docker. Na przykład zadzwońmy do tego pliku „Cron”.

    Cat Cron  

    Nasz przykładowy plik wygląda jak:

    cron * * * * * echo „bieżąca data to„ data ””>/var/log/cron 

    Dodaj wszystkie zadania crontab w powyższym pliku, które należy uruchomić pod kontenerem Docker.

  3. Utwórz DockerFile
  4. Następnie utwórz „Dockerfile” który instaluje usługę CRON i kopiuje skrypt do kontenera. Tutaj podaliśmy 3 przykłady DockerFile za pomocą systemu operacyjnego innego 2. Alpine Linux jest bardzo lekki i wystarczy do uruchamiania cronjobs. Ale jeśli chcesz skonfigurować inne środowiska Linux Ubuntu, Apache i PHP. Wybierz dowolny z poniższych szablonów DockerFile w oparciu o Twoje wymagania.

    • Dockerfile z alpine Linux
    • Od alpejskiego: 3 # Kopiuj plik CRON do Conteer Copy Cron /Etc /Cron.D/cron # Podaj uprawnienia uruchom CHMOD 0644/etc/cron.D/cron # Dodaj Cron Job Run Crontab/Etc/Cron.D/Cron # Link Link Plik dziennika do stdout uruchom ln -s/dev/stdout/var/log/cron # Uruchom usługę cron w cmd na pierwszym planie [„crond”, „-l”, „2”, „-f "]
      12345678910111213141516Od alpejskiego: 3 # Kopiuj plik cron do Conterecopy Cron /Etc /Cron.D/cron # daj uprawnieniu chmod 0644/etc/cron.D/cron # Dodaj Cron Jobrun crontab/etc/cron.D/cron # Link Log dziennika do stDoUtrun Ln -s/dev/stdout/var/log/cron # Uruchom usługę cron w ForegroundCmd [„crond”, „-l”, „2”, „-f”]

    • Dockerfile z Apache i PHP
    • Z PHP: 8.0 -APache # Zainstaluj Cron Uruchom aktualiza.D/cron # Podaj uprawnienia uruchom CHMOD 0644/etc/cron.D/cron # Dodaj Cron Job Run Crontab/Etc/Cron.D/cron # link plik dziennika cron do stdout uruchom ln -s/dev/stdout/var/log/cron # start cron Service Uruchom sed -i 's/^exec/service cron start \ n \ nexec/'/usr/ lokalny/bin/apache2-foreground
      1234567891011121314151617181920Z PHP: 8.0 -APache # Zainstaluj aktualizację cronrun apt && \ apt -y instaluj cron # kopiuj plik cron do ContereCopy Cron /etc /cron.D/cron # daj uprawnieniu chmod 0644/etc/cron.D/cron # Dodaj Cron Jobrun crontab/etc/cron.D/cron # link plik dziennika cron do stdoutrun ln -s/dev/stdout/var/log/cron # start cron servicerun sed -i 's/^exec/service cron start \ n \ nexec/'/usr/local/local/ Bin/Apache2-Foreground

    • Dockerfile z Ubuntu Linux
    • Z Ubuntu: najnowszy # instaluj Cron Deamon Uruchom apt aktualiza.D/cron # Podaj uprawnienia uruchom CHMOD 0644/etc/cron.D/cron # Dodaj Cron Job Run Crontab/Etc/Cron.D/Cron # Link Log dziennika do stdout Uruchom ln -s/dev/stdout/var/log/cron # Uruchom usługę CRON w CMD na pierwszym planie [„Cron”, „-f”]
      12345678910111213141516171819Z Ubuntu: najnowszy # instaluj cron deamonrun apt aktualizacja && apt instal -y cron # kopiuj plik cron do ContainerCopy Cron /itp.D/cron # Podaj uprawnienia uruchom CHMOD 0644/etc/cron.D/cron # Dodaj Cron Jobrun crontab/etc/cron.D/Cron # Link Log dziennika do stDoUtrun Ln -s/dev/stdout/var/log/cron # Uruchom usługę cron w ForegroundCmd [„cron”, „-f”]

  5. Buduj i uruchom pojemnik
  6. Masz dwa pliki w bieżącym katalogu. Jednym z nich jest „cron”, który zawiera cronjobs, a drugi to Dockerfile, który ma instrukcje kompilacji dla Dockera. Uruchom następujące polecenie, aby zbudować obraz Docker za pomocą DockerFile:

    Docker Build -t my_cron .  

    Po pomyślnym zbudowaniu obrazu możesz uruchomić kontener za pomocą obrazu:

    Docker Run -d my_cron  

    To rozpocznie demon cron pod kontenerem, który zdefiniuje wszystkie zaplanowane zadania „Cron” plik.

  7. Konfiguracja testowa
  8. Cronjobs powinny być skutecznie skonfigurowane z kontenerami Docker. Jak połączyliśmy plik dziennika cron (/var/log/cron) z/dev/stdout. Pokaż wszystkie dzienniki generowane przez usługę CRON „Docker Logs” Komenda.

    Najpierw znajdź identyfikator lub nazwę kontenera za pomocą „Docker PS” Komenda.

    Docker Ps  

    Następnie sprawdź pliki dziennika kontenera Docker.

    Docker Logs Contener_id 

    W Cronjobs wydrukowałem bieżącą datę i zapisałem je do dzienników. Możesz zobaczyć poniższy obraz, który pokazuje bieżącą datę w dziennikach co minutę.

    Uruchomienie cronjobs w Docker

    Oznacza to, że zadania CRON działają prawidłowo pod kontenerem Docker.

Owinięcie

Cron Jobs to przydatny sposób na automatyzację codziennych zadań na komputerze, takie jak tworzenie kopii zapasowych plików. Jednak z Dockerem sprawy stają się trochę trudniejsze, ponieważ nie możesz po prostu uruchomić nowej instancji Cron z terminala i oczekiwać, że będzie działać. Podczas uruchamiania pracy Cron w pojemniku Docker napotkasz kilka wyzwań w zależności od tego, jak i gdzie chcesz uruchomić pojemnik. Interwał pracy Cron jest określony w sekundach i może wahać się od minuty do nieco ponad 100 lat. Częstotliwość zadań Cron jest określona pod względem liczby razy, w których zadanie CRON powinno być wykonywane codziennie.

Jeśli chodzi o planowanie zadań i programów, które automatycznie działają w ustalonych odstępach czasu lub mogą być wywołane przez inne wydarzenie, masz mnóstwo opcji. Możesz użyć narzędzia ogólnego przez. Cron, choć nie tak potężny jak AWS Lambda, jest solidnym wyborem, jeśli używasz pojemników, ponieważ jest zaprojektowany do obsługi zadań w tle w systemach Unix. Jednak z Dockerem sprawy stają się trochę trudniejsze, ponieważ nie możesz po prostu uruchomić nowej instancji Cron z terminala i oczekiwać, że zadziała.