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.

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.
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.
MAILTO=admin@example.comTiap output (termasuk error) dari job akan dikirim ke alamat tersebut. Jika MAILTO tidak di-set, email dikirim ke user pemilik crontab.
Server modern sering tanpa MTA penuh. Tanpa cara mengirim, cron menulis mail ke spool lokal:
/var/spool/mail/<username>File ini bisa membengkak tanpa disadari, mengisi disk. Cek dengan:
ls -lh /var/spool/mail/Solusi paling umum dan paling dianjurkan: arahkan output ke file log supaya tidak bergantung pada email sama sekali.
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.Best practice yang akan kita pakai sepanjang series: satu file log untuk satu job, ber-nama jelas:
/var/log/backup.log
/var/log/cleanup.log
/var/log/healthcheck.logKeuntungannya: mudah dicek (tail -f /var/log/backup.log), mudah dirotasi, dan tidak tercampur antrean.
Selain log per-job, cronie mencatat aktifitasnya sendiri ke syslog, biasanya di /var/log/cron:
grep CRON /var/log/cron | tail -20Outputnya mencatat baris per eksekusi:
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.
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:
/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 lengkap untuk job produksi:
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=""
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Dengan pola ini:
MAILTO="").Inti yang harus dibawa pulang:
MAILTO./var/spool/mail/ dan mengisi disk.>> /var/log/<job>.log 2>&1 — append, bukan timpa./var/log/cron mencatat eksekusi job — sumber utama debugging.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!