Apa Itu Cron Job? Pengertian, Contoh, dan Panduannya Lengkap

Apa Itu Cron Job? Pengertian, Contoh, dan Panduannya Lengkap

Siapa pun pasti akan merasa sangat bosan kalau disuruh mengerjakan tugas yang sama berulang kali. Nah, bagi administrator sistem, cron job adalah solusinya, yang bisa membantu melakukan tugas secara otomatis. Cron job bisa digunakan di VPS atau OS apa pun yang serupa dengan Unix.

Dengan cron job, user bisa menghemat waktu untuk fokus pada tugas lain yang lebih penting.

Tutorial kami kali ini akan membantu Anda belajar cron job. Hal-hal yang kami bahas mencakup berbagai jenis cron job, string khusus, permission, dan contoh syntax cron job. Setelah membaca artikel ini, Anda pun bisa langsung memanfaatkannya dengan efisien. Yuk, simak sampai selesai!

Apa Itu Cron Job?

Cron adalah tool yang memungkinkan user menginput command (perintah untuk menjadwalkan tugas berulang pada waktu tertentu. Cron job adalah tugas yang dijadwalkan di cron. User bisa menentukan tugas yang mereka inginkan untuk dijalankan secara otomatis beserta waktu eksekusinya.

Selain itu, cron merupakan daemon, yaitu background process (proses latar belakang) yang mengeksekusi tugas non-interaktif. Anda mungkin sudah sering melihat background process di Windows, seperti Services, yang kerjanya mirip dengan cron daemon.

Daemon selalu dalam keadaan idle (stand-by), yang menunggu perintah untuk mengeksekusi tugas tertentu. Perintah tersebut bisa diinput melalui komputer apa pun yang ada di jaringan.

Kemudian, ada juga cron file, yaitu file teks sederhana yang berisi command yang perlu dijalankan secara berkala pada waktu tertentu. File tabel cron sistem default atau file konfigurasi crontab adalah /etc/crontab, yang berada di direktori crontab /etc/cron.*/.

Hanya administrator sistem yang bisa mengedit file crontab sistem. Tapi, sistem operasi serupa Unix mendukung beberapa admin sekaligus. Jadi, setiap admin tersebut bisa membuat file crontab dan menulis command untuk menjalankan job kapan pun mereka menginginkannya.

Dengan adanya cron job, user bisa mengotomatiskan pemeliharaan sistem, pemantauan ruang disk, dan penjadwalan backup. Karena kemampuannya ini, cron job cocok untuk komputer yang harus berjalan non-stop, misalnya server.

Cron job memang umumnya digunakan administrator sistem, tapi para web developer juga bisa menggunakannya.

Contohnya, sebagai administrator website, Anda bisa mengonfigurasi:

  • satu cron job untuk backup website otomatis setiap hari pada tengah malam
  • satu cron job untuk mengecek broken link setiap Senin tengah malam
  • satu cron job lagi untuk menghapus cache website setiap Jumat siang

Sayangnya, seperti halnya program lainnya, cron memiliki keterbatasan yang mungkin perlu Anda pertimbangkan sebelum mulai menggunakannya:

  • Interval tersingkat antara dua cron job adalah 60 detik. Anda tidak bisa mengulangi job untuk waktu kurang dari 59 detik.
  • Terpusat pada satu komputer. Cron job tidak bisa didistribusikan ke beberapa komputer dalam satu jaringan. Jadi, kalau komputer yang menjalankan cron job mengalami crash, tugas yang sudah terjadwal tidak akan dieksekusi. Tugas yang terlewatkan tersebut hanya bisa dijalankan secara manual.
  • Tidak ada mekanisme coba ulang otomatis. Cron dirancang untuk eksekusi pada waktu yang sudah ditentukan. Kalau salah satu tugas gagal dijalankan, tugas tersebut tidak akan dijalankan lagi hingga waktu terjadwal berikutnya. Keterbatasan ini menjadikan cron kurang sesuai untuk tugas bertahap.

Meskipun memiliki keterbatasan, cron masih menjadi solusi yang tepat untuk tugas sederhana yang perlu dijalankan pada waktu tertentu, dengan interval reguler selama setidaknya 60 detik.

Kalau Anda ingin menjadwalkan job yang hanya dilakukan satu kali, sebaiknya pertimbangkan metode lain.

Tips Berguna

Sebelum membuat cron job, pastikan script Anda bisa dieksekusi. Caranya, buka file di browser Anda (menggunakan URL) atau jalankan script melalui SSH (tergantung pada jenis script Anda). Kalau script tidak bisa dijalankan, hubungi developer untuk mendapatkan bantuan.

Operasi Dasar Cron Job

Bagian ini akan menunjukkan cara menjadwalkan cron job, dengan menginput command ke program shell seperti Bash di Linux atau sistem operasi serupa Unix lainnya.

VPS hosting dari Hostinger menggunakan sistem operasi berbasis Linux. Jadi, sebaiknya pelajari cara menjadwalkan cron job agar Anda bisa turut meningkatkan efisiensi alur kerja Anda sebagai administrator VPS. Command line untuk VPS bisa diakses melalui PuTTY SSH atau melalui terminal berbasis browser langsung dari hPanel:

La página de resumen de VPS en hPanel. El botón Browser terminal está resaltado

Sebelum menuju ke operasi dasar cron, penting untuk memahami lebih dulu berbagai file konfigurasi cron job:

  • System crontab. Gunakan file ini untuk menjadwalkan job penting pada skala sistem, yang hanya bisa diubah dengan hak izin akses root.
  • User crontab. File ini memungkinkan user membuat dan mengedit cron job yang hanya berjalan pada tingkat user.

Kalau ingin mengedit system crontab, pastikan user memiliki hak izin akses root.

Berikut ini adalah beberapa operasi dasar yang bisa dilakukan cron:

operasi dasar cron job

Untuk membuat atau mengedit file crontab, masukkan command berikut:

crontab -e

Apabila tidak ada file crontab yang ditemukan pada sistem Anda, command akan otomatis membuat yang baru. crontab -e memungkinkan Anda menambahkan, mengedit, dan menghapus cron job.

Untuk mengedit file crontab, Anda memerlukan editor teks seperti vi atau nano. Saat pertama kali memasukkan crontab -e, Anda akan diminta menentukan editor teks yang ingin digunakan untuk mengedit file crontab.

Untuk melihat daftar tugas terjadwal yang aktif di sistem Anda, masukkan command berikut:

crontab -l

Kalau sistem Anda memiliki beberapa user, Anda bisa melihat daftar file crontab user dengan memasukkan command berikut ini sebagai superuser:

crontab -u username -l

Selain itu, Anda juga bisa mengedit job terjadwal user lain dengan mengetikkan command crontab berikut:

sudo su crontab -u username -e

Untuk mendapatkan hak izin akses root bagi Anda sendiri, tambahkan sudo su di awal command. Beberapa command (termasuk yang di atas) hanya bisa dieksekusi oleh user root.

Terakhir, untuk menghapus semua tugas terjadwal di file crontab dan memulai yang baru, ketikkan command berikut:

crontab -r

Command berikut ini sama dengan command crontab -r, tapi user akan melihat pilihan yes/no sebelum menghapus crontab:

crontab -i

Selain crontab, user root juga bisa menambahkan cron job ke direktori etc/cron.d. Langkah ini cocok untuk eksekusi script pada instalasi otomatis dan update.

Perlu diingat bahwa user yang menambahkan cron job ke direktori ini harus memiliki akses root dan mengikuti konvensi penamaan run-parts.

Selain itu, user root bisa memindahkan script mereka ke direktori berikut ini untuk menjadwalkan eksekusinya:

  • /etc/cron.hourly/ – Mengeksekusi semua script satu kali dalam satu jam
  • /etc/cron.daily/ – Mengeksekusi satu kali dalam satu hari
  • /etc/cron.weekly/ – Mengeksekusi satu kali dalam satu minggu
  • /etc/cron.monthly/ – Mengeksekusi satu kali dalam satu bulan

Syntax Crontab

Untuk membuat cron job, Anda harus memahami syntax (sintaksis) dan format cron lebih dulu. Kalau tidak, Anda mungkin akan kesulitan mengatur cron job.

Syntax crontab terdiri dari lima field dengan value berikut:

  • Minute. Menit saat command akan dijalankan, antara 0 sampai 59.
  • Hour. Jam saat command akan dijalankan, dengan rentang 0-23 (format waktu 24 jam).
  • Day of the month. Hari dalam suatu bulan yang diinginkan user untuk menjalankan command, dengan rentang 1-31.
  • Month. Bulan yang user inginkan untuk menjalankan command, dengan rentang 1-12 untuk Januari sampai Desember.
  • Day of the week. Hari dalam satu minggu saat perintah akan dijalankan, dengan rentang 0-6 yang mewakili Minggu sampai Sabtu. Dalam beberapa sistem, value 7 mewakili hari Minggu.

Semua field ini harus diisi dan tidak boleh dibiarkan kosong.

Sebagai contoh, kalau Anda ingin menyiapkan cron job untuk menjalankan root/backup.sh setiap Jumat pukul 17.37, cron command Anda akan menjadi seperti ini:

37 17 * * 5 root/backup.sh

Value 37 dan 17 di atas mewakili pukul 17.37. Dua tanda bintang untuk value Day of the month dan Month mewakili value apa pun yang memungkinkan. Artinya, tugas tersebut akan diulang pada semua tanggal dan semua bulan. Terakhir, value 5 mewakili hari Jumat. Deretan angka tersebut kemudian diikuti oleh lokasi tugas.

Kalau merasa kurang yakin untuk menulis sintaksis cron secara manual, Anda bisa menggunakan tool gratis seperti Crontab Generator atau Crontab.guru untuk mendapatkan angka yang tepat bagi waktu dan tanggal yang perlu dimasukkan dalam command.

Anda harus benar-benar memahami operator cron job agar bisa mengatur waktu yang tepat untuk cron command. Operator ini memungkinkan Anda menentukan value mana yang ingin dimasukkan ke setiap field. Anda harus menggunakan operator yang tepat di semua file crontab.

  • Tanda bintang atau asterisk (*). Gunakan operator ini untuk mewakili semua value yang bisa digunakan dalam suatu field. Misalnya, apabila Anda ingin cron job dieksekusi setiap menit, tulis tanda bintang pada field Minute.
  • Tanda koma (,). Gunakan operator ini untuk mencantumkan beberapa value sekaligus. Misalnya, menulis 1,5 pada field Day of the week akan menjadwalkan eksekusi tugas setiap hari Senin dan Jumat.
  • Tanda hubung atau hyphen (-). Gunakan operator ini untuk menentukan rentang value. Misalnya, kalau Anda ingin menyiapkan cron job mulai Juni hingga September, tuliskan 6-9 pada field Month.
  • Tanda garis miring atau separator (/). Gunakan operator ini untuk membagi value. Contohnya, kalau Anda ingin script dieksekusi setiap 12 jam, tuliskan */12 dalam field Hour.
  • Last (L). Operator ini bisa digunakan pada field Day of the month dan Day of the week. Jadi, menuliskan 3L pada field Day of the week berarti hari Rabu terakhir (last) dalam satu bulan.
  • Weekday (W). Gunakan operator ini untuk menentukan hari kerja terdekat dalam waktu tertentu. Misalnya, tanggal 1 pada suatu bulan jatuh di hari Sabtu. Menuliskan 1W pada field Day of the month akan menjalankan command pada hari kerja terdekat setelah hari Sabtu tanggal 1 tersebut, yaitu hari Senin minggu depan (tanggal 3).
  • Tanda pagar atau hash (#). Gunakan operator ini untuk menentukan hari dalam minggu tertentu, diikuti angka 1-5 yang mewakili minggu dalam sebulan. Sebagai contoh, menulis 1#2 merujuk pada hari Senin (1) kedua (2) dalam suatu bulan.
  • Tanda tanya (?). Gunakan operator ini untuk menginput “no specific value” (tidak ada value tertentu) pada field Day of the month dan Day of the week.

Special String untuk Cron Job

Special string atau string khusus cron job bisa membantu user menjadwalkan cron job pada interval waktu tertentu tanpa harus mencari tahu deretan logis angka yang perlu dimasukkan. Untuk menggunakan string ini, tuliskan tanda @ diikuti frasa-frasa tertentu.

Berikut adalah beberapa special string yang bisa Anda gunakan dalam command:

  • @hourly. Job dieksekusi satu kali setiap satu jam.
  • @daily atau @midnight. String ini akan menjalankan tugas setiap hari pada tengah malam.
  • @weekly. Gunakan untuk menjalankan job sebanyak satu kali setiap minggunya, pada hari Minggu tengah malam.
  • @monthly. Special string ini menjalankan perintah satu kali pada hari pertama dalam suatu bulan.
  • @yearly. Gunakan untuk menjalankan tugas satu kali dalam satu tahun, pada tanggal 1 Januari tengah malam.
  • @reboot. Dengan string ini, job hanya akan dieksekusi satu kali pada waktu mulai (start-up).

Penting! Selalu berhati-hati saat Anda menjadwalkan cron job yang berkaitan dengan zona waktu.

Contoh Syntax Cron

Setelah Anda mempelajari contoh cron syntax yang benar, sekarang kami akan membantu Anda memahaminya dengan lebih baik.

Selalu ingat bahwa output cron akan secara otomatis dikirimkan ke akun email lokal Anda. Kalau tidak ingin lagi menerima email, Anda bisa menambahkan >/dev/null 2>&1 pada command seperti contoh berikut:

0 5 * * * /root/backup.sh >/dev/null 2>&1

Kalau Anda ingin mengirim output tersebut ke akun email tertentu, tambahkan MAILTO dan alamat email yang dimaksud. Berikut contohnya:

MAILTO="email.saya@hostinger.co.id"
0 3 * * * /root/backup.sh >/dev/null 2>&1

Nah, untuk memahami contoh cron syntax dengan lebih baik, simak contoh command berikut ini:

ContohPenjelasan
0 0 * * 0 /root/backup.shMenjalankan backup setiap hari Minggu tengah malam.
0 * * * 1 /root/clearcache.shMenghapus cache setiap jam pada hari Senin.
0 6,18 * * * /root/backup.shBackup data dua kali dalam satu hari pada pukul 06.00 dan 18.00
*/10 * * * * /scripts/monitor.shMelakukan monitoring setiap 10 menit.
*/15 * * * * /root/backup.shMelakukan backup setiap 15 menit.
* * 20 7 * /root/backup.shMelakukan backup setiap menit pada tanggal 20 Juli.
0 22 * * 1-5 /root/clearcache.shMenghapus cache setiap hari kerja (Senin–Jumat) pada pukul 22.00.
0 0 * * 2 * /root/backup.shMelakukan backup setiap Selasa tengah malam.
* * * 1,2,5 * /scripts/monitor.shMelakukan monitoring setiap menit selama Januari, Februari, dan Mei.
10-59/10 5 * * * /root/clearcache.shMenghapus cache setiap sepuluh menit pada pukul 05.00, dimulai pada 05.10.
0 8 1 */3 * /home/user/script.shMengatur tugas agar dijalankan per kuartal, pada hari pertama bulan tersebut pukul 08.00.
0 * * * * /root/backup.shMembuat backup setiap jam.
* * * * * /scripts/script.sh; /scripts/scrit2.shMenyertakan beberapa tugas dalam satu cron job. Berguna untuk menjadwalkan beberapa tugas yang perlu dieksekusi bersamaan.
@reboot /root/clearcache.shMenghapus cache setiap kali Anda menyalakan sistem.
0 8 1-7 * 1 /scripts/script.shMenjalankan script pada hari Senin pertama setiap bulan, pukul 08.00.
5 4 * * 0 /root/backup.shMembuat backup setiap hari Minggu pukul 04.05.
15 9 1,20 * * /scripts/monitor.shMenjalankan monitoring pada pukul 09.15 di tanggal 1 dan 20 setiap bulan.
@hourly /scripts/monitor.shMenjalankan monitoring setiap jam.
0 0 1,15 * 3 /scripts/script.shMenjalankan script setiap Rabu tengah malam, antara tanggal 1 hingga 15 setiap bulan.
15 14 1 * * /root/clearcache.shMenghapus cache di hari pertama dalam satu bulan, pada pukul 14.15.
00 08-17 * * 1-5 bin/check-db-statusMengecek status database setiap hari dari Senin–Jumat, per jam dari pukul 08.00 hingga 17.00.
15 6 1 1 * /root/backup.shMelakukan backup setiap tanggal 1 Januari pukul 06.15.
0 0 * * * /scripts/monitor.shMengeksekusi script monitoring satu kali dalam sehari, tengah malam.
0 0 15 * * /root/clearcache.shMenghapus cache pada tanggal 15 setiap bulan, tengah malam.
* * * * 1,5 /scripts/monitor.shMelakukan monitoring setiap Senin dan Jumat.

Cron Permission

Anda bisa membuat atau mengedit file-file berikut ini untuk mengizinkan atau membatasi user agar tidak menggunakan file cron sistem:

  • /etc/cron.allow — apabila file cron.allow sudah ada, file ini memuat nama user yang diberi izin untuk menggunakan cron job.
  • /etc/cron.deny — apabila tidak ada file cron.allow tapi ada file cron.deny, user yang ingin menggunakan cron job tidak boleh dicantumkan dalam file cron.deny.

Kesimpulan

Menjadwalkan tugas secara otomatis tentu merupakan solusi yang benar-benar praktis agar Anda tidak melewatkan tugas yang penting.

Cron job adalah metode yang tepat bagi administrator sistem dan web developer agar bisa mengelola tugas repetitif. Cukup ketikkan command yang sesuai, lalu pilih waktu eksekusi yang benar.

Untuk menjadwalkan cron job, gunakan sintaksis yang tepat dalam command line. Atau, Anda bisa menggunakan string khusus agar lebih mudah. Ingat, berikan permission yang sesuai agar hanya user yang sah yang bisa mengakses file cron job.

Semoga artikel ini bisa membantu Anda memahami konsep dasar tentang apa itu crob job untuk menjadwalkan tugas, ya. Kalau masih memiliki pertanyaan atau saran, silakan tuliskan pada kolom komentar di bawah ini.

Author
Penulis

Faradilla A.

Faradilla, yang lebih akrab disapa Ninda, adalah Content Marketing Specialist di Hostinger. Ia suka mengikuti tren teknologi, digital marketing, dan belajar bahasa. Melalui tutorial Hostinger ini, Ninda ingin berbagi informasi dan membantu pembaca menyelesaikan masalah yang dialami. Kenali Ninda lebih dekat di LinkedIn.