Menjalankan Cronjob di dalam Docker Panduan Pemula

Menjalankan Cronjob di dalam Docker Panduan Pemula

Ketika datang ke penjadwalan pekerjaan dan program yang secara otomatis berjalan pada interval yang ditetapkan atau dapat dipicu oleh acara lain, Anda memiliki banyak opsi. 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 solid jika Anda menggunakan wadah karena dirancang untuk menangani tugas latar belakang pada sistem UNIX. Dengan Docker, bagaimanapun, segalanya menjadi sedikit lebih rumit karena Anda tidak bisa hanya meluncurkan instance cron baru dari terminal Anda dan berharap itu berhasil.

Cara merampok pekerjaan cron

Untuk menjalankan pekerjaan cron di dalam wadah Docker, Anda perlu menggunakan layanan cron dan menjalankannya di latar depan di wadah Docker Anda.

Berikut adalah contoh bagaimana Anda dapat mengatur ini:

  1. Buat File Cron:
  2. Buat file yang berisi semua pekerjaan cron yang akan dijalankan di bawah wadah Docker. Misalnya, mari kita panggil file ini 'cron'.

    CRON Kucing  

    File contoh kami terlihat seperti:

    cron * * * * * echo "Tanggal saat ini adalah 'tanggal'">/var/log/cron 

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

  3. Buat DockerFile
  4. Selanjutnya, buat file 'Dockerfile' yang menginstal layanan cron dan menyalin skrip ke dalam wadah. Di sini kami telah memberikan 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 Container Copy Cron /etc /Cron.d/cron # berikan izin jalankan chmod 0644/etc/cron.D/CRON # Tambahkan pekerjaan cron run crontab/etc/cron.D/CRON # LINK CRON LOG File ke stdout menjalankan ln -s/dev/stdout/var/log/cron # menjalankan layanan cron di foreground cmd ["crond", "-l", "2", "-f "]
      12345678910111213141516Dari 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 # LINK CRON LOG FILE KE STDOUTRUN LN -S/DEV/STDOUT/VAR/LOG/CRON # Jalankan Layanan Cron di fordoundCMD ["crond", "-l", "2", "-f"]

    • Dockerfile dengan Apache dan PHP
    • Dari PHP: 8.0 -APACHE # Instal Cron Run APT UPDATE && \ APT -Y INSTAL CRON # COPY CRON File ke Container Copy Cron /etc /Cron.d/cron # berikan izin jalankan chmod 0644/etc/cron.D/CRON # Tambahkan pekerjaan cron run crontab/etc/cron.D/CRON # LINK CRON LOG File ke stdout run ln -s/dev/stdout/var/log/cron # start cron service run sed -i 's/^exec/service cron start \ n \ nexec/'/usr/ Lokal/bin/apache2-foreground
      1234567891011121314151617181920Dari PHP: 8.0 -APACHE # Instal Cronrun APT UPDATE && \ APT -Y INSTAL CRON # COPY CRON File ke containercopy cron /etc /cron.d/cron # berikan izinrun chmod 0644/etc/cron.D/CRON # Tambahkan cron jobrun crontab/etc/cron.D/CRON # LINK CRON LOG FILE KE STDOUTRUN LN -S/DEV/STDOUT/VAR/LOG/CRON # MULAI CRON SERVICERUN SED -I 'S/^EXEC/LAYANAN CRON MULAI \ n \ NEXEC/'/USR/LOCAL/LOCAL/ bin/apache2-foreground

    • Dockerfile dengan ubuntu linux
    • Dari Ubuntu: Terbaru # Instal Cron Deamon Run App Update && Apt Install -y Cron # Copy Cron File ke Container Copy Cron /etc /Cron.d/cron # berikan izin jalankan chmod 0644/etc/cron.D/CRON # Tambahkan pekerjaan cron run crontab/etc/cron.D/CRON # LINK CRON LOG File ke stdout menjalankan ln -s/dev/stdout/var/log/cron # menjalankan layanan cron di foreground cmd ["cron", "-f"]
      12345678910111213141516171819Dari ubuntu: terbaru # instal cron deamonrun app update && apt install -y cron # copy cron file ke containercopy cron /etc /cron.d/cron # berikan izin jalankan chmod 0644/etc/cron.D/CRON # Tambahkan cron jobrun crontab/etc/cron.D/CRON # LINK CRON LOG FILE KE STDOUTRUN LN -S/DEV/STDOUT/VAR/LOG/CRON # Jalankan Layanan Cron di foregroundCMD ["cron", "-f"]

  5. Bangun dan jalankan wadah
  6. Anda memiliki dua file di direktori Anda saat ini. Salah satunya adalah 'cron' yang berisi cronjobs dan yang kedua adalah Dockerfile yang memiliki instruksi build untuk Docker. Jalankan perintah berikut untuk membangun gambar Docker menggunakan DockerFile:

    Docker build -t my_cron .  

    Setelah gambar berhasil dibangun, Anda dapat meluncurkan wadah menggunakan gambar:

    Docker run -d my_cron  

    Ini akan memulai daemon cron di bawah wadah, yang akan semua pekerjaan yang dijadwalkan didefinisikan 'cron' mengajukan.

  7. Pengaturan tes
  8. Cronjobs harus berhasil dikonfigurasi dengan wadah Docker. Karena kami telah menautkan file log cron (/var/log/cron) ke/dev/stdout. Tunjukkan semua log yang dihasilkan oleh layanan cron dapat menjadi benih 'Docker Logs' memerintah.

    Pertama, temukan ID atau nama kontainer menggunakan 'Docker PS' memerintah.

    Docker PS  

    Kemudian periksa file log dari wadah Docker.

    Docker Log Container_id 

    Di cronjobs, saya telah mencetak tanggal saat ini dan menulisnya ke log. Anda dapat melihat gambar di bawah ini yang menunjukkan tanggal saat ini dalam log setiap menit.

    Menjalankan Cronjobs di Docker

    Itu berarti pekerjaan cron berjalan dengan benar di bawah wadah Docker.

Membungkus

Pekerjaan Cron adalah cara yang praktis untuk mengotomatisasi tugas harian di komputer Anda, seperti membuat cadangan file. Namun, dengan Docker menjadi sedikit lebih rumit karena Anda tidak bisa hanya meluncurkan instance cron baru dari terminal Anda dan berharap itu berjalan. Saat menjalankan pekerjaan cron di wadah Docker, Anda akan mengalami beberapa tantangan tergantung pada bagaimana dan di mana Anda ingin menjalankan wadah. Interval pekerjaan cron ditentukan dalam hitungan detik dan dapat berkisar dari satu menit hingga lebih dari 100 tahun. Frekuensi pekerjaan cron ditentukan dalam hal berapa kali pekerjaan cron harus dieksekusi setiap hari.

Ketika datang ke penjadwalan pekerjaan dan program yang secara otomatis berjalan pada interval yang ditetapkan atau dapat dipicu oleh acara lain, Anda memiliki banyak opsi. 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 solid jika Anda menggunakan wadah karena dirancang untuk menangani tugas latar belakang pada sistem UNIX. Dengan Docker, bagaimanapun, segalanya menjadi sedikit lebih rumit karena Anda tidak bisa hanya meluncurkan instance cron baru dari terminal Anda dan berharap itu berhasil.