Skip to content

emka.web.id

Menu
  • Home
  • Indeks Artikel
  • Tutorial
  • Tentang Kami
Menu

Menjalankan Cronjob Inside Docker: Panduan Pemula

Posted on December 31, 2022 by Syauqi Wiryahasana

Ketika datang ke pekerjaan penjadwalan dan program yang secara otomatis berjalan pada interval yang ditentukan atau dapat dipicu oleh acara lain, Anda memiliki banyak pilihan. Anda dapat menggunakan utilitas tujuan umum seperti cron, penjadwal bawaan di macOS atau Linux, atau alat khusus seperti AWS Lambda. Cron, meskipun tidak sekuat AWS Lambda, adalah pilihan yang tepat jika Anda menggunakan wadah karena dirancang untuk menangani tugas latar belakang pada sistem Unix. Namun, dengan Docker, hal-hal menjadi sedikit lebih rumit karena Anda tidak bisa begitu saja meluncurkan instance cron baru dari terminal Anda dan mengharapkannya berfungsi. layanan cron dan jalankan di latar depan dalam wadah Docker Anda.

Berikut adalah contoh bagaimana Anda dapat mengatur ini:
Buat File Cron:

Buat file yang berisi semua tugas cron untuk dijalankan di bawah wadah Docker. Misalnya, sebut saja file ini `cron`.
cat cron 


Contoh file kita terlihat seperti:
cron * * * * * echo "Current date is `date`" > /var/log/cron 

Tambahkan semua crontab pekerjaan di file di atas yang perlu dijalankan di bawah wadah Docker.
Buat Dockerfile

Berikutnya, buat `Dockerfile` yang menginstal layanan cron dan menyalin skrip ke dalam wadah. Di sini kami telah menyediakan 3 contoh Dockerfile menggunakan sistem operasi yang berbeda-2. Alpine Linux sangat ringan dan cukup untuk menjalankan cronjobs. Tetapi jika Anda perlu mengatur lingkungan lain Linux Ubuntu, Apache, dan PHP. pilih salah satu dari templat Dockerfile yang diberikan di bawah ini berdasarkan kebutuhan Anda.
Dockerfile dengan Alpine Linux

DARI alpine:3 # Salin file cron ke wadah SALIN cron /etc/cron.d/cron # Berikan izin RUN chmod 0644 /etc/cron. d/cron # Tambahkan cron job RUN crontab /etc/cron.d/cron # Tautkan file log cron ke stdout RUN ln -s /dev/stdout /var/log/cron # Jalankan layanan cron di CMD latar depan [ " crond", "-l", "2", "-f" ]12345678910111213141516FROM alpine:3 # Salin file cron ke containerCOPY cron /etc/cron.d/cron # Berikan izinRUN chmod 0644 /etc/cron.d/ cron # Tambahkan cron jobRUN crontab /etc/cron.d/cron # Tautkan file log cron ke stdoutRUN ln -s /dev/stdout /var/log/cron # Jalankan layanan cron di latar depanCMD [ "crond", "- l", "2", "-f" ]
Dockerfile with Apache and PHP


FROM php:8.0-apache # Install cron RUN apt update && apt -y install cron # Copy cron file to the container COPY cron /etc/cron. d/cron # Beri izin RUN chmod 0644 /etc/cron .d/cron # Tambahkan cron job RUN crontab /etc/cron.d/cron # Tautkan file log cron ke stdout RUN ln -s /dev/stdout /var/log/cron # Mulai layanan cron RUN sed -i `s /^exec /service cron startnnexec /` /usr/local/bin/apache2-foreground1234567891011121314151617181920FROM php:8.0-apache # Install cronRUN apt update &&     apt -y install cron # Salin file cron ke containerCOPY cron /etc /cron.d/cron # Berikan izinRUN chmod 0644 /etc/cron.d/cron # Tambahkan crontab cron jobRUN /etc/cron.d/cron # Tautkan file log cron ke stdoutRUN ln -s /dev/stdout /var /log/cron # Mulai cron serviceRUN sed -i `s/^exec /service cron startnnexec /` /usr/local/bin/apache2-foreground
Dockerfile dengan Ubuntu Linux


DARI ubuntu:terbaru # Instal cron deamon RUN pembaruan apt && apt install -y cron # Salin file cron ke wadah COPY cron /etc/cron.d/cron # Berikan izin RUN chmod 0644 /etc/cron.d/cron # Tambahkan pekerjaan cron RUN crontab /etc/cron. d/cron # Tautkan file log cron ke stdout RUN ln -s /dev/s tdout /var/log/cron # Jalankan layanan cron di CMD latar depan ["cron", "-f"]12345678910111213141516171819FROM ubuntu:latest # Install cron deamonRUN apt update && apt install -y cron # Salin file cron ke containerCOPY cron /etc/cron.d/cron # Berikan izin RUN chmod 0644 /etc/cron.d/cron # Tambahkan crontab cron jobRUN /etc/cron.d/cron # Tautkan file log cron ke stdoutRUN ln -s /dev/ stdout /var/log/cron # Jalankan layanan cron di latar depanCMD ["cron", "-f"]
Bangun dan Jalankan Container

Anda memiliki dua file di direktori saat ini. Salah satunya adalah `cron` yang berisi cronjobs dan yang kedua adalah Dockerfile yang memiliki instruksi build untuk Docker. Jalankan perintah berikut untuk membuat image Docker menggunakan Dockerfile:
docker build -t my_cron . 

Setelah gambar berhasil dibangun, Anda dapat meluncurkan wadah menggunakan image:
docker run -d my_cron 

Ini akan memulai daemon cron di bawah wadah, yang akan mengatur semua pekerjaan terjadwal yang ditentukan dalam `cron `berkas. Test Setup


Cronjobs harus berhasil dikonfigurasi dengan container docker. Karena kami telah menautkan file log cron (/var/log/cron) ke /dev/stdout. Tampilkan semua log yang dihasilkan oleh layanan cron dapat di-seed di perintah `docker logs`.

Pertama, temukan id atau nama container menggunakan perintah `docker ps`.
docker ps 

Kemudian periksa file log dari Docker container.
docker logs container_id

Dalam cronjobs, saya telah mencetak tanggal saat ini dan menuliskannya ke log. Anda dapat melihat gambar di bawah ini yang menunjukkan tanggal saat ini di log setiap menit.
Menjalankan Cronjobs di DockerMenjalankan Cronjobs di Docker
Artinya cron job berjalan dengan benar di bawah Docker container.
Wrapping Up

Cron job s adalah cara praktis untuk mengotomatiskan tugas harian di komputer Anda, seperti mencadangkan file. Namun, dengan Docker, segalanya menjadi sedikit lebih rumit karena Anda tidak bisa begitu saja meluncurkan instance cron baru dari terminal Anda dan mengharapkannya berjalan. Saat menjalankan tugas cron dalam wadah buruh pelabuhan, Anda akan mengalami beberapa tantangan tergantung pada bagaimana dan di mana Anda ingin menjalankan wadah. Interval tugas cron ditentukan dalam detik dan dapat berkisar dari satu menit hingga lebih dari 100 tahun. Frekuensi tugas cron ditentukan dalam hal berapa kali tugas cron harus dijalankan setiap hari.

Ketika datang ke tugas penjadwalan dan program yang secara otomatis berjalan pada interval yang ditentukan atau dapat dipicu oleh peristiwa lain, Anda memiliki banyak pilihan. Anda dapat menggunakan utilitas tujuan umum seperti cron, penjadwal bawaan di macOS atau Linux, atau alat khusus seperti AWS Lambda. Cron, meskipun tidak sekuat AWS Lambda, adalah pilihan yang tepat jika Anda menggunakan wadah karena dirancang untuk menangani tugas latar belakang pada sistem Unix. Namun, dengan Docker, segalanya menjadi sedikit lebih rumit karena Anda tidak bisa begitu saja meluncurkan instance cron baru dari terminal Anda dan mengharapkannya berfungsi.


Referensi tecadmin.com
Seedbacklink

Recent Posts

TENTANG EMKA.WEB>ID

EMKA.WEB.ID adalah blog seputar teknologi informasi, edukasi dan ke-NU-an yang hadir sejak tahun 2011. Kontak: kontak@emka.web.id.

©2024 emka.web.id Proudly powered by wpStatically