Belajar Cron Job - Output, Mail & Logging
Episode 5 of 23

Belajar Cron Job - Output, Mail & Logging

Output job cron tidak hilang begitu saja: secara default ia dikirim melalui email lewat MAILTO, dan jika tidak ada MTA ia membusuk di spool mail. Episode ini mengajarkan redirect output ke file log dengan >> /var/log/cron.log 2>&1, membaca /var/log/cron, dan praktik logging per-job yang benar.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Pendahuluan

Di episode 4 kita bisa menulis jadwal. Pertanyaan berikutnya: ke mana output job pergi? Satu baris echo "backup selesai" di crontab — siapa yang akan melihatnya?

Cron punya perilaku default yang sering mengejutkan: output yang tidak diarahkan ke mana-mana akan dikumpulkan dan dikirim lewat email. Di server tanpa MTA (Mail Transfer Agent), email itu justru menumpuk di spool mail dan mengisi disk. Episode ini membahas bagaimana cron menangani output, dan praktik logging yang benar agar kalian tidak kehilangan jejak job.

Output Cron: Perilaku Default

Saat sebuah perintah di crontab menghasilkan output (stdout atau stderr) dan tidak di-redirect, crond menampungnya dan mengirimnya sebagai email kepada pemilik crontab — atau ke alamat di variabel MAILTO.

Struktur crontab dengan MAILTO
MAILTO=admin@example.com

Tiap output (termasuk error) dari job akan dikirim ke alamat tersebut. Jika MAILTO tidak di-set, email dikirim ke user pemilik crontab.

Masalahnya: Tanpa MTA, Email Menumpuk

Server modern sering tanpa MTA penuh. Tanpa cara mengirim, cron menulis mail ke spool lokal:

Spool mail lokal
/var/spool/mail/<username>

File ini bisa membengkak tanpa disadari, mengisi disk. Cek dengan:

Cek ukuran spool mail
ls -lh /var/spool/mail/

Redirect Output ke Log

Solusi paling umum dan paling dianjurkan: arahkan output ke file log supaya tidak bergantung pada email sama sekali.

Menambahkan ke Log: > vs >>

Redirect stdout
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  • >> menambahkan (append) ke akhir file — jangan pakai > yang menimpa.
  • 2>&1 menggabungkan stderr ke stdout, sehingga error juga masuk log.

Log Per-Job

Best practice yang akan kita pakai sepanjang series: satu file log untuk satu job, ber-nama jelas:

Lokasi log per-job
/var/log/backup.log
/var/log/cleanup.log
/var/log/healthcheck.log

Keuntungannya: mudah dicek (tail -f /var/log/backup.log), mudah dirotasi, dan tidak tercampur antrean.

/var/log/cron: Log Aktifitas Cron

Selain log per-job, cronie mencatat aktifitasnya sendiri ke syslog, biasanya di /var/log/cron:

Lihat log aktifitas cron
grep CRON /var/log/cron | tail -20

Outputnya mencatat baris per eksekusi:

Contoh isi /var/log/cron
Aug 13 02:30:01 host CROND[1234]: (root) CMD ( /usr/local/bin/backup.sh )

Log ini adalah sumber utama debugging: dari sini terlihat apakah job dijalankan, kapan, dan oleh user mana.

Logrotate: Jangan Biarkan Log Membengkak

Log yang terus bertambah akhirnya mengisi disk — ironis untuk alat yang seharusnya mencegah itu. Putar log secara berkala dengan logrotate, yang jadwalnya sendiri dikelola via cron:

/etc/logrotate.d/custom
/var/log/backup.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
}

Konfigurasi di atas memutar log tiap hari, menyimpan 14 riwayat, dan mengkompresinya. Kita bahas logrotate lebih jauh di episode 10.

Warning

Jangan pakai dua sistem logging sekaligus untuk job yang sama (email + redirect) tanpa alasan. Redirect ke file memberi kontrol penuh, sedangkan email tanpa MTA hanya membusuk. Pilih satu alur yang jelas, dan pastikan MAILTO="" bila kalian ingin mematikan pengiriman mail sepenuhnya.

Pola Logging yang Direkomendasikan

Pola lengkap untuk job produksi:

Pola logging produksi
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=""
 
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Dengan pola ini:

  • Tidak ada email yang menumpuk (MAILTO="").
  • Semua jejak ada di satu file log yang terindeks waktu.
  • Log bisa dirotasi dan dipantau.

Penutup

Inti yang harus dibawa pulang:

  • Output cron tanpa redirect dikirim via email ke MAILTO.
  • Tanpa MTA, email menumpuk di /var/spool/mail/ dan mengisi disk.
  • Redirect dengan >> /var/log/<job>.log 2>&1 — append, bukan timpa.
  • Gunakan satu file log per job dengan nama jelas.
  • /var/log/cron mencatat eksekusi job — sumber utama debugging.
  • Putar log dengan logrotate agar tidak membengkak.

Di episode 6 selanjutnya kita akan membahas environment dan PATH di cron — kenapa script yang jalan sempurna di terminal malah "command not found" di crontab, bagaimana cron memakai /bin/sh dengan PATH pendek, dan cara mengaturnya dengan SHELL, PATH, dan HOME. Ini salah satu misteri paling umum di dunia cron!

Belajar Cron Job - Output, Mail & Logging | Belajar Cron Job