Beberapa Hal yang Harus Diperhatikan Ketika Menggunakan Cron Job


Cron Job adalah tool yang berguna untuk mengeksekusi program yang kita pilih pada waktu spesifik (resolusi waktu 1 menit). Program ini akan melakukan pengecekan 'pekerjaan' yang harus dia lakukan setiap menit pada sebuah tabel yang disebut crontab, yang berisi waktu eksekusi program yang diinginkan dan alamat eksekusi program itu sendiri.

Cron job sangat sering dipakai untuk melakukan otomatisasi. Sejujurnya beberapa projek yang saya kerjakan memanfaat cron job ini. Keuntungan terbesar dari menggunakan cron job, jika kita ingin mengotomatisasi running script yang kita buat sendiri, kita tidak perlu memikirkan algoritma otomatisasinya dalam script tersebut sehingga script yang dibuat menjadi lebih pendek dan lebih mudah dibuatnya.

Di sini kita tidak akan membahas cara menggunakan cron job, karena itu sangat mudah dan sudah banyak bertebaran di internet cara melakukannya. Di sini kita akan membahas tentang hal-hal yang harus diperhatikan ketika menggunakan cron job karena berdasarkan pengalaman saya pribadi ketika pertama kali  (dan beberapa waktu lainnya) menggunakan cron job, tool ini tidak bekerja seperti yang saya harapkan. Langsung saja, berikut adalah daftar hal-hal yang harus diperhatikan ketika menggunakan cron job.

1.) Cron job melakukan eksekusi literally pada waktu yang kita tetapkan.

Ok, ini sangat obvious tapi terkadang kita melupakannya dan bisa jadi masalah. Asumsi kita 'menjadwalkan' eksekusi program kita tiap hari pada pukul 09.20. Ternyata pukul 09.00 ada pemadaman listrik selama 1 jam, sehingga pada pukul 09.20 komputer yang kita gunakan tersebut dalam keadaan mati. Pada pukul 10.00 listrik kembali menyala dan komputer kita hidup juga secara otomatis, apakah eksekusi program tersebut akan langsung dikerjakan oleh cron job walaupun jamnya sudah lewat? Tentu tidak, cron job akan mengeksekusi program tersebut di ke esokan harinya pada jam yang sama.

2.) Cron job mengeksekusi tiap program yang dijadwalkan secara parallel.

Asumsi kita punya 2 program yang ingin dieksekusi. Niatnya ketika program yang satunya selesai di eksekusi, kita ingin menjadwalkan program satunya lagi dikerjakan karena keluaran dari program pertama akan menjadi masukan dari program kedua. Oleh karena itu, kamu men set program pertama running pada jam 08.00 dan program kedua pukul 08.30. Kamu memberi waktu 30 menit bagi program pertama untuk menghasilkan keluaran sebelum program kedua dieksekusi agar masukan untuk program kedua sudah siap. Ini kesalahan yang fatal dan juga kurang efektif! Mengapa? Ok, asumsi waktu eksekusi program pertama tanpa kamu sadari adalah 1 jam, oleh karena itu pada jam 08.30 program pertama masih dalam proses eksekusi. Apa yang akan terjadi pada saat itu? Apakah cron job akan menunggu program pertama selesai running lalu kemudian dilanjutkan program kedua? Tidak, program kedua akan langsung di eksekusi pada saat itu juga (pukul 08.30) tanpa menunggu program pertama selesai dan hasilnya program kedua tersebut akan terkena error karena masukannya tidak tersedia. Ketika program kedua di eksekusi, eksekusi program pertama tidak dibatalkan, kedua program ini dieksekusi secara bersama-sama a.k.a eksekusi secara parallel.

Jika memang menemui kasus yang mirip seperti ilustrasi tesebut, sebaiknya dibuatkan saja suatu script shell wrapper untuk menjalankan kedua program tersebut secara berurutan.



Lalu masukkan sript shell wrapper tersebut ke crontab menggantikan 2 program tadi.

3.) Direktori kerja cron job adalah home user tersebut.

Misalkan user yang kita gunakan adalah user1, maka direktori kerja dari cron job untuk user 1 adalah /home/user1. Jadi, jika program yang ingin dijalankan (./program1) sudah ada di direktori home, maka pada perintah crontab -e, program tersebut dicantumkan langsung saja dengan nama ./program1 atau /home/user1/program1.

4.) Environment variabel cron job sangat minim, hampir tidak ada.

Satu-satunya environment variabel yang dipunyai oleh cron job saat mengeksekusi program kita hanyalah PATH=/usr/bin. Oleh karena itu, sangat disarankan untuk membuat script shell wrapper untuk menjalankan program yang kita inginkan. Pada script wrapper tersebut, di baris awalnya deklarasikanlah menggunakan perintah EXPORT (asumsi jika menggunakan bash) untuk menginclude semua environment variabel yang kita butuhkan untuk menjalankan program yang ingin kita eksekusi secara terjadwal tersebut.


5.) Tidak semua program atau fungsi bisa dijalankan secara background.

Apa hubungannya ini dengan cron job? Cron job menjalankan semua program yang dijadwalkan pada belakang layar a.k.a tanpa memprompt window baru untuk eksekusi program tersebut. Oleh karena itu, walaupun program yang kita ingin jalankan menggunakan cron job sudah terbukti work saat kita jalankan secara manual, saran saya coba terlebih dahulu didemokan menggunakan cron job dengan men set waktu eksekusi waktu per 1 menit agar tidak terlalu lama menunggu waktu eksekusinya.

Pelajaran ini saya dapatkan ketika menjalankan script python untuk ploting peta menggunakan matplotlib yang ketika saya menjalankannya secara manual, scriptnya work tanpa masalah sama sekali dan menghasilkan peta ploting yang diinginkan. Akan tetapi ketika di jalan kan oleh cron job, keluarannya nihil. Cek per cek ternyata fungsi penyimpanan plot pada library matplotlib normalnya tidak bisa berjalan secara background, harus di set terlebih dahulu librarynya barulah bisa digunakan dalam mode background.

Ok, itu saja beberapa hal yang menurut saya harus diperhatikan ketika menggunakan cron job berdasarkan pengalaman saya menggunakan tool ini. Sekian.

Komentar