Mengenal Cron Job: Cara Linux Menjalankan Tugas Sesuai Jadwal

Cron job adalah tugas yang dijalankan server-mu otomatis sesuai jadwal — tiap menit, tiap malam, tiap Senin. Pelajari cara kerja cron, cara membaca dan menulis jadwal lima kolom yang terkenal itu, di mana letak jebakannya, dan kapan sebaiknya beralih ke systemd timer.

Diterbitkan 26 September 202610 menit bacaOleh ACY Partner Indonesia
Cron job — menjalankan tugas Linux otomatis sesuai jadwal
300 × 250Slot Iklan TersediaPasang iklan Anda di sini

Ada pekerjaan di server yang nggak bisa nunggu manusia ingat untuk melakukannya. Backup perlu jalan tiap malam. File log lama perlu dibersihkan tiap minggu. Sebuah laporan perlu dikirim lewat email tiap Senin jam 8 pagi. Kamu bisa saja pasang alarm dan mengerjakannya manual selamanya — atau kamu serahkan saja tugas itu ke cron, bagian dari Linux yang seluruh tujuan hidupnya memang menjalankan sesuatu sesuai jadwal, diam-diam, tanpa perlu kamu tongkrongin.

Cron termasuk perkakas yang sudah ada puluhan tahun dan sampai sekarang masih dipakai di mana-mana. Begitu kamu paham satu barisnya yang terlihat agak misterius itu — jadwal lima kolom — kamu bisa mengotomasi hampir semua tugas berulang di sebuah server. Yuk kita bedah pelan-pelan, mulai dari nol.

Cron job itu sebenarnya apa

Cron job adalah sebuah perintah (atau skrip) plus jadwal yang memberi tahu sistem kapan perintah itu harus jalan. Jadwal dan perintahnya tinggal bareng dalam satu baris, dan sistem menyimpan daftar baris-baris itu untukmu.

Di balik layar, ada sebuah program latar kecil — sebuah service — bernama cron daemon (sering ditulis cron atau crond). Dia bagian dari keluarga program latar yang selalu menyala, yang sudah kita bahas di proses dan service. Daemon ini bangun kira-kira tiap menit, melihat setiap baris jadwal yang dia ketahui, lalu bertanya satu hal sederhana: apakah sekarang waktunya menjalankan yang ini? Kalau jawabannya iya, dia jalankan perintahnya. Kalau belum, dia tidur lagi dan mengecek ulang semenit kemudian.

Cuma itu intinya. Cron sendiri nggak mengerjakan tugasnya — dia cuma penjaga jam yang sabar, yang meluncurkan perintah milikmu pada waktu yang kamu tentukan. Daftar baris-baris jadwal tadi disebut crontab, singkatan dari “cron table”.

Daemon-nya harus dalam keadaan jalan

Cron cuma bekerja kalau service cron memang hidup di mesin itu. Di kebanyakan server, dia menyala otomatis saat boot dan terus jalan, jadi kamu jarang memikirkannya. Tapi kalau job terjadwalmu entah kenapa nggak pernah jalan, hal pertama yang harus kamu cek adalah apakah cron daemon-nya benar-benar hidup — service yang mati berarti nggak ada apa pun yang terjadwal, sebagus apa pun crontab-mu kelihatannya.

Membaca jadwal lima kolom

Bagian yang terkenal (dan terkenal bikin bingung) dari cron adalah jadwalnya itu sendiri. Bentuknya lima angka berderet, masing-masing menggambarkan satu satuan waktu, dari yang terkecil ke yang terbesar:

 ┌───────────── menit         (0 - 59)
 │ ┌─────────── jam           (0 - 23)
 │ │ ┌───────── tanggal       (1 - 31)
 │ │ │ ┌─────── bulan         (1 - 12)
 │ │ │ │ ┌───── hari          (0 - 6, Minggu = 0)
 │ │ │ │ │
 *  *  *  *  *   perintah-yang-dijalankan

Bacanya dari kiri ke kanan: menit, jam, tanggal, bulan, hari, baru perintahnya. Tanda bintang (*) di kolom mana pun berarti “semua nilai” — setiap menit, setiap jam, dan seterusnya.

Jadi jadwal paling sederhana dari semuanya adalah lima bintang:

* * * * * /path/ke/script.sh

Itu dibaca sebagai “setiap menit di setiap jam di setiap hari” — job-nya jalan sekali tiap menit, selamanya. Berguna buat tes; jarang yang kamu mau di lingkungan produksi.

Biar lebih jelas, ini contoh jadwal yang benar-benar kepakai, lengkap dengan bacaan polosnya satu per satu:

# Pukul 02:30 tiap malam — waktu klasik buat backup
30 2 * * * /opt/scripts/backup.sh

# Tiap 15 menit, sepanjang hari
*/15 * * * * /opt/scripts/health-check.sh

# Pukul 08:00 tiap Senin — Senin = hari ke-1
0 8 * * 1 /opt/scripts/weekly-report.sh

# Tanggal 1 tiap bulan, tengah malam
0 0 1 * * /opt/scripts/monthly-cleanup.sh

# Tiap jam, pas di awal jam
0 * * * * /opt/scripts/sync.sh

Kunci yang membuka semuanya: ketika sebuah kolom berisi *, dia nggak memasang batasan apa-apa. Job-nya jalan kapan pun kolom-kolom yang bukan bintang semuanya cocok. Pada 30 2 * * *, cuma menit (30) dan jam (2) yang dipatok, jadi dia cocok sekali sehari — pukul 02:30, tiap hari, tiap bulan, nggak peduli hari apa.

Jurus tambahan: step, daftar, dan rentang

Kamu nggak harus menulis satu angka tunggal di tiap slot. Cron mengerti beberapa pola kecil yang bikin jadwal jauh lebih luwes:

  • */n — step. */15 di kolom menit berarti “tiap 15 menit” (di menit :00, :15, :30, :45). */2 di kolom jam berarti “tiap 2 jam”.
  • a,b,c — daftar. 0 9,12,17 * * * jalan pukul 9 pagi, tengah hari, dan 5 sore — tiga jam yang spesifik.
  • a-b — rentang. 0 9-17 * * 1-5 jalan tiap jam dari pukul 9 pagi sampai 5 sore, Senin sampai Jumat — pola “jam kerja, hari kerja”.

Kamu juga bisa menggabungkannya. 0 8-18/2 * * * berarti “tiap 2 jam antara pukul 8 pagi dan 6 sore”. Baca jadwal yang rumit satu kolom demi satu kolom, dan dia selalu kebuka dengan rapi.

Jangan andalkan feeling — pastikan jadwalnya

Ekspresi cron gampang salah baca, dan yang keliru bisa jalan terlalu sering (atau malah nggak pernah). Sebelum memercayai sebuah jadwal di server sungguhan, cek ulang artinya dalam bahasa polos: ucapkan tiap kolom dengan suara, atau tulis bacaan manusianya dalam komentar tepat di sebelah barisnya, seperti contoh-contoh di atas. Jadwal yang jalan tiap menit padahal kamu maksud tiap bulan bisa diam-diam menggebuk server-mu berhari-hari sebelum ada yang sadar.

Mengedit crontab-mu

Tiap user di sistem punya crontab pribadinya sendiri. Kamu nggak mengedit file-nya langsung pakai text editor — sebagai gantinya kamu pakai perintah crontab, yang membuka daftarmu dengan aman lalu memuat ulang isinya begitu kamu selesai.

# Buka crontab MILIKMU untuk diedit
crontab -e

# Tampilkan (cetak) crontab-mu sekarang tanpa mengedit
crontab -l

# Hapus seluruh crontab-mu — hati-hati, tanpa konfirmasi
crontab -r

Pertama kali kamu menjalankan crontab -e, dia mungkin menanyakan mau pakai text editor yang mana; pilih yang kamu nyaman. Di dalamnya, tiap baris yang bukan kosong dan bukan komentar adalah satu job. Baris yang diawali # adalah komentar dan diabaikan — pas banget buat memberi label apa fungsi tiap job.

Crontab yang rapi dan terdokumentasi dengan baik kelihatannya begini:

# Backup database tiap malam pukul 02:30
30 2 * * * /opt/scripts/backup-db.sh

# Bersihkan file sementara tiap Minggu pukul 04:00
0 4 * * 0 /opt/scripts/clean-temp.sh

# Perpanjang sertifikat dua kali sehari (irama yang disarankan)
0 0,12 * * * /opt/scripts/renew-certs.sh

Ada juga crontab sistem di /etc/crontab dan folder titip-an kecil seperti /etc/cron.d/, plus direktori praktis bernama /etc/cron.daily/, /etc/cron.weekly/, dan seterusnya. Apa pun yang kamu taruh di cron.daily bakal jalan sekali sehari tanpa kamu perlu menulis jadwal sama sekali — sistem yang mengatur waktunya. Itu berguna buat tugas berskala sistem, tapi untuk job pribadimu, crontab -e milikmu sendiri biasanya tempat paling bersih untuk mulai.

Cara cron job sebenarnya berjalan (dan kenapa ini bikin orang kaget)

Ini bagian yang hampir selalu menjegal orang di percobaan pertama. Saat cron menjalankan perintahmu, dia tidak menjalankannya dengan cara yang sama seperti shell interaktifmu. Dia jalan di lingkungan yang serba minim:

 sesi terminal-mu                   lingkungan cron
 ─────────────────                  ───────────────
 PATH lengkap (banyak folder)       PATH mungil (sering cuma /usr/bin:/bin)
 env variable-mu sudah dimuat       hampir nggak ada env variable
 direktori = posisimu sekarang      direktori = folder home-mu
 konfigurasi shell di-load          file konfigurasi TIDAK di-load

Dampak praktisnya: sebuah skrip yang jalan sempurna saat kamu ketik manual bisa gagal diam-diam di bawah cron. Dua biang kerok yang biasanya muncul:

  1. Perintah “not found”. Shell-mu tahu di mana python, node, atau pg_dump berada karena PATH-mu kaya. PATH milik cron melompong, jadi dia nggak bisa menemukannya. Solusinya: pakai path absolut lengkap ke tiap program dan file di job-mu — /usr/bin/python3 /opt/scripts/job.py, bukan sekadar python3 job.py. (Kalau kamu butuh penyegaran soal apa itu PATH, lihat environment variable.)
  2. Env variable yang hilang. Kalau skrip-mu bergantung pada sebuah variabel yang biasanya diset saat login shell, cron nggak punya itu. Set yang kamu butuhkan secara eksplisit di dalam skrip, atau definisikan di bagian atas crontab.

Kebiasaan yang paling bisa diandalkan: arahkan cron ke sebuah skrip, lalu biarkan skrip itu menyiapkan dunianya sendiri — path absolut, variabelnya sendiri, direktori kerjanya sendiri. Dengan begitu cron cukup meluncurkan satu hal, dan skripnya yang mengurus sisanya.

Menangkap output, atau dia lenyap

Secara bawaan, apa pun yang dicetak job-mu — output normal dan pesan error — bakal dikirim lewat email ke user, itu pun kalau mail memang diatur. Di server biasa, mail nggak diatur, jadi output itu cuma lenyap begitu saja. Saat sebuah job gagal jam 3 pagi dan kamu nggak tahu kenapa, inilah biasanya alasannya: error-nya ada, tapi nggak ada yang menangkapnya.

Solusinya: arahkan sendiri output-nya ke sebuah file log:

# Kirim output normal DAN error ke sebuah file log
30 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

Ada dua bagian yang bekerja di sini. >> /var/log/backup.log menambahkan output normal ke file log (tanda dobel >> artinya tambahkan, jadi kamu menyimpan riwayat alih-alih menimpanya). Lalu 2>&1 berkata “kirim error ke tempat yang sama dengan output normal”, supaya kegagalan ikut mendarat di log. Dengan satu tambahan itu, job yang tadinya bisu dan misterius berubah jadi job yang benar-benar bisa kamu telusuri — tinggal baca log-nya.

Job yang nggak pernah ngelog adalah job yang nggak bisa kamu percaya

Menjalankan tugas terjadwal tanpa logging itu seperti terbang dengan mata tertutup. Kamu nggak bakal tahu apakah dia jalan, apakah berhasil, atau apakah dia sudah diam-diam gagal selama sebulan. Selalu arahkan output ke tempat yang bisa kamu baca, minimal selagi job-nya masih baru. Beberapa karakter ekstra di ujung baris itu adalah pembeda antara “aku tahu persis apa yang terjadi” dan “aku nggak ada bayangan sama sekali”.

Kapan sebaiknya beralih ke systemd timer

Cron itu hebat untuk job sederhana yang berbasis waktu, dan dia nggak akan ke mana-mana. Tapi di sistem Linux modern ada penjadwal kedua yang layak kamu kenal: systemd timer. Dia bagian dari sistem systemd yang sama yang mengelola service (sudah dibahas di dasar systemd), dan dia menukar sedikit kerepotan setup dengan beberapa kelebihan nyata:

  • Logging bawaan. Output sebuah timer mengalir otomatis ke journal sistem, jadi kamu bisa membacanya dengan perkakas journal standar — nggak perlu pengalihan manual.
  • Mengejar run yang terlewat. Sebuah timer bisa disuruh menjalankan job yang terlewat gara-gara server mati saat waktunya tiba. Cron tinggal melewatkan run yang terlewat itu sepenuhnya.
  • Ketergantungan dan syarat. Sebuah timer bisa menunggu sampai jaringan hidup, atau cuma jalan kalau syarat tertentu terpenuhi — hal-hal yang nggak bisa diungkapkan cron.

Pedoman jujurnya: untuk tugas singkat semacam “jalankan skrip ini tiap malam”, cron biasa lebih cepat diatur dan sudah lebih dari cukup. Untuk sesuatu yang lebih penting — di mana kamu peduli pada run yang terlewat, log yang rapi, atau urutan — systemd timer adalah pilihan yang lebih kokoh. Keduanya punya tempatnya masing-masing; menguasai keduanya berarti kamu memilih alat yang tepat alih-alih memaksa satu alat mengerjakan segalanya.

Kenapa cron layak dipelajari

Otomasi adalah salah satu hal yang memisahkan server yang harus kamu tongkrongin dari server yang mengurus dirinya sendiri. Cron adalah cara tertua, paling sederhana, paling universal untuk mewujudkan itu, dan kamu bakal menemuinya di hampir tiap mesin Linux yang pernah kamu sentuh. Backup, pembersihan, pembuatan laporan, perpanjangan sertifikat, pengecekan kesehatan — pekerjaan kasar yang nggak keren tapi penting dalam menjalankan server, sangat sering adalah sebuah cron job di balik layar.

Jadwal lima kolom itu terlihat misterius selama kira-kira sepuluh menit, lalu setelahnya dia nggak pernah lagi bikin kamu bingung. Belajar membacanya, biasakan memakai path absolut dan mencatat output-mu, dan kamu sudah punya robot kecil yang bisa diandalkan untuk mengerjakan tugas membosankan selagi kamu tidur.

Penutup

Ini rangkuman semuanya dalam satu tempat:

  • Cron job adalah sebuah perintah plus jadwal yang memberi tahu sistem kapan menjalankannya otomatis.
  • Cron daemon adalah service latar yang bangun tiap menit dan menjalankan job mana pun yang sudah tiba waktunya.
  • Jadwalnya punya lima kolom — menit, jam, tanggal, bulan, hari — diikuti perintahnya. * berarti “semua nilai”.
  • Step (*/n), daftar (a,b,c), dan rentang (a-b) bikin jadwal jadi luwes: tiap 15 menit, hari kerja jam 9–5, tanggal 1 tiap bulan, dan seterusnya.
  • Edit job-mu dengan crontab -e, tampilkan dengan crontab -l. Beri komentar tiap baris supaya tujuannya jelas.
  • Cron jalan di lingkungan yang melompong — pakai path absolut, set variabel yang kamu butuhkan, dan arahkan output ke log (>> file 2>&1) supaya kegagalan nggak tak kelihatan.
  • Untuk mengejar run yang terlewat, logging otomatis, dan syarat, pertimbangkan systemd timer sebagai gantinya.

Dengan tugas terjadwal sudah kamu kuasai, kamu kini sudah melihat sebagian besar perkakas harian untuk menjalankan server Linux: menjelajahinya, mengamankannya, memindahkan file ke dalamnya, dan sekarang mengajarinya mengerjakan tugas berulangnya sendiri sesuai jam.

Tag:linuxcronotomasiserverpemula
728 × 90Slot Iklan TersediaPasang iklan Anda di sini

Artikel Terkait

Lihat Semua Artikel

Artikel yang Mungkin Kamu Suka

SSL dan enkripsi at rest — data terlindungi saat berjalan dan saat tersimpan di disk
Server / Keamanan Server

SSL dan Enkripsi at Rest: Melindungi Data Saat Berjalan dan Saat Tersimpan

Enkripsi melindungi data di dua tempat: saat data lewat di jaringan (in transit) dan saat data nganggur di disk (at rest). Pahami bedanya, kenapa kamu butuh keduanya, bagaimana TLS, enkripsi disk, dan pengelolaan kunci sebenarnya saling melengkapi, plus kesalahan praktis yang sering bikin sia-sia.

9 Nov 202612 menit baca
Mengamankan port dan service — menutup pintu di server yang tidak kamu pakai
Server / Keamanan Server

Mengamankan Port dan Service: Menutup Pintu yang Tidak Kamu Pakai

Setiap port yang terbuka di server adalah satu pintu yang bisa dicoba orang lain. Pahami port dan service itu sebenarnya apa, kenapa service yang terekspos jadi risiko terbesarmu, dan kebiasaan sederhana menutup semua yang tidak kamu butuhkan — dijelaskan dari nol.

8 Nov 202610 menit baca
Prinsip least privilege — memberi hanya akses minimum yang dibutuhkan tiap user dan proses
Server / Keamanan Server

Prinsip Least Privilege: Beri Setiap Hal Hanya Akses yang Benar-Benar Dibutuhkan

Least privilege adalah aturan diam-diam di balik hampir semua setup keamanan yang solid: setiap user, proses, dan kunci hanya dapat akses minimum untuk menjalankan tugasnya, tidak lebih.

7 Nov 202612 menit baca
Fail2ban dan dasar intrusi — mengawasi log dan mem-banned otomatis pelaku yang menggedor berulang kali
Server / Keamanan Server

Fail2ban dan Dasar Intrusi: Mem-banned Otomatis Bot yang Terus Menggedor Server-mu

Penyerang tidak berhenti setelah sekali salah tebak — mereka terus menggedor, ribuan kali sehari. Pahami seperti apa sebenarnya percobaan intrusi, apa yang dikerjakan fail2ban, bagaimana ia mengawasi log dan mem-banned pelaku otomatis, dan cara menyetelnya dengan masuk akal tanpa mengunci dirimu.

6 Nov 202612 menit baca
Menjaga software tetap update — menutup lubang keamanan yang sudah diketahui sebelum penyerang memakainya
Server / Keamanan Server

Menjaga Software Tetap Update: Kebiasaan Membosankan yang Mencegah Sebagian Besar Pembobolan Server

Kebanyakan server tidak dibobol lewat serangan baru yang canggih — tapi lewat lubang lama yang sudah diketahui, yang sebenarnya cukup ditutup dengan update. Pelajari kenapa update itu penting, apa saja yang harus di-update, cara melakukannya dengan aman tanpa merusak apa pun, dan cara.

5 Nov 20269 menit baca
Konfigurasi firewall — aturan default-deny yang hanya membuka port yang kamu butuhkan
Server / Keamanan Server

Konfigurasi Firewall: Menyusun Aturan Default-Deny Tanpa Mengunci Diri Sendiri

Tahu apa itu firewall dan benar-benar mengonfigurasinya dengan rapi adalah dua keterampilan berbeda. Pelajari cara menyusun aturan default-deny, mengurutkan aturan dengan benar, membuka akses sendiri lebih dulu, menangani IPv6 dan security group cloud, lalu mengujinya sebelum dipakai — panduan.

4 Nov 202614 menit baca