Menjaga Cron Job Dalam Docker Container

Menjaga Cron Job Dalam Docker Container

Dalam artikel ini, saya akan membahas bagaimana menjaga cron job dalam sebuah aplikasi yang dijalankan melalui Docker. Salah satu tantangan yang kita hadapi adalah membuat cron job berjalan secara efektif dalam sebuah container Docker.

Pertama-tama, kita perlu memahami bahwa cron job adalah sebuah program yang dapat berjalan pada interval tertentu untuk melakukan tugas-tugas tertentu. Dalam aplikasi Rails, misalnya, kita dapat menggunakan gem Whenever untuk membuat cron job.

Dalam contoh ini, saya akan menggunakan Dockerfile untuk menginstal dan mengkonfigurasi cron. Saya juga akan menggunakan docker-compose.yml untuk menjalankan aplikasi dan service cron.

Menginstal Cron Dengan Dockerfile

Berikut adalah code Dockerfile yang digunakan untuk menginstal cron:

# Install crontab and give the user 'app' access to be call and run cronjobs
RUN addgroup crontab && \
 apt-get -qq update && apt-get install -y cron && \
 apt-get clean && rm -rf /var/lib/apt/lists/* && \
 touch /var/log/cron.log && touch /etc/cron.allow && \
 echo "app" > /etc/cron.allow

Pada baris pertama, kita membuat grup crontab dan memberikan hak akses untuk user 'app' untuk menjalankan cron job. Pada baris kedua, kita menginstal cron dengan menggunakan apt-get.

Membuat Cron Job

Berikut adalah code Dockerfile yang digunakan untuk membuat cron job:

# Create a cronjob to run a specific task
RUN (crontab -l ; echo "*/5 * * * * cd /app && RAILS_ENV=production /usr/local/bundle/bin/bundle exec rake sometask > /dev/null") | crontab

Pada baris pertama, kita menggunakan crontab untuk membuat cron job yang akan menjalankan tugas khusus. Pada baris kedua, kita menulis script cron yang akan dijalankan.

Menggunakan Docker-Compose

Berikut adalah code docker-compose.yml yang digunakan untuk menjalankan aplikasi dan service cron:

version: 3.7

x-common-defaults: &app-defaults
 image: my_rails_app:0.0.1
 environment:
 - RAILS_ENV=${RAILS_ENV}
 - RAILS_MASTER_KEY=${RAILS_MASTER_KEY}

services:
 app:
 <<: *app-defaults
 command: rails s
 volumes:
 - public:/volumes/public
 cron:
 <<: *app-defaults
 command: cron -f
volumes:
 public:

Pada baris pertama, kita mendefinisikan variabel x-common-defaults yang akan digunakan oleh kedua service, yaitu aplikasi dan cron. Pada baris kedua, kita mendefinisikan service aplikasi dengan menggunakan image my_rails_app:0.0.1. Pada baris ketiga, kita mendefinisikan environment variable untuk aplikasi. Pada baris keempat, kita mendefinisikan volume public yang akan digunakan oleh aplikasi.

Problema dan Solusi

Dalam artikel ini, saya menjumpai beberapa problema yang terkait dengan cron job. Salah satunya adalah bahwa cron job tidak berjalan secara efektif dalam container Docker. Saya menemukan bahwa penyebabnya adalah karena cron job tidak dijalankan dalam environment development, sehingga aplikasi tidak dapat diakses melalui localhost:3000.

Saya juga menjumpai beberapa solusi yang terkait dengan problema tersebut. Salah satunya adalah dengan menggunakan gem Whenever untuk membuat cron job. Saya juga menemukan bahwa penyebabnya adalah karena cron job tidak dijalankan dalam environment production, sehingga aplikasi tidak dapat diakses melalui localhost:3000.

Dalam kesimpulan, menjaga cron job dalam sebuah aplikasi yang dijalankan melalui Docker memerlukan beberapa langkah. Kita perlu menginstal cron dengan menggunakan Dockerfile, membuat cron job dengan menggunakan crontab, dan mendefinisikan service cron dalam docker-compose.yml. Dengan demikian, kita dapat menjaga cron job agar berjalan secara efektif dalam container Docker.

Leave a comment