Anacron menjalankan job yang tertunda saat mesin sempat mati — cocok untuk laptop dan workstation. Episode ini membedah /etc/anacrontab, mekanisme timestamp-nya, dan cara /etc/cron.hourly|daily|weekly|monthly bekerja lewat run-parts, plus kapan memakai pendekatan yang mana.

Di episode 7 kita sudah punya disiplin debugging. Sekarang kita bahas dua komponen yang melengkapi cron untuk kasus khusus: anacron untuk mesin yang sering mati, dan system cron directories untuk menjadwalkan script berbasis interval.
Bayangkan kalian punya laptop yang dipakai pukul 09.00-18.00, lalu tidur di malam hari. Cron murni akan melewatkan job jam 02.30 saat laptop mati — dan tidak pernah mengejarnya. Anacron ada untuk menutup celah ini.
Anacron melacak kapan terakhir kali sebuah job dijalankan, bukan jam berapa ia dijadwalkan. Jika job seharusnya jalan kemarin tapi mesin mati, anacron menjalankannya begitu mesin aktif — tanpa peduli sudah lewat jam berapa.
Anacron 2.3
Updated timestamp for job `cron.daily' to 2026-08-12Format /etc/anacrontab berbeda dari crontab:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
RANDOM_DELAY=45
START_HOURS_RANGE=3-22
1 5 cron.daily run-parts /etc/cron.daily
7 10 cron.weekly run-parts /etc/cron.weeklyEmpat field per baris:
RANDOM_DELAY dan START_HOURS_RANGE mengatur penyebaran beban saat banyak job menunggu.
Anacron menyimpan kapan terakhir job dijalankan:
/var/spool/anacron/cron.daily
/var/spool/anacron/cron.weeklyJika isi file ini ketinggalan lebih dari satu periode, anacron menganggap job tertunda. Hapus timestamp untuk memaksa job dijalankan ulang:
sudo rm /var/spool/anacron/cron.daily
sudo anacron -f -d cron.dailyDirektori system ini menjalankan semua script di dalamnya pada interval tertentu. Untuk menambah job, cukup taruh script eksekutabel:
sudo cp /usr/local/bin/my-task.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/my-task.shMekanisme di baliknya adalah run-parts — perintah yang menjalankan setiap file eksekutabel di sebuah direktori, sesuai aturan penamaan:
sudo run-parts --report /etc/cron.dailyNama file hanya boleh berisi huruf, angka, strip, dan underscore. Titik (misal script.sh) umumnya ditolak oleh run-parts di sebagian implementasi:
ls -l /etc/cron.daily/ | headBaris berikut di /etc/crontab menghubungkan keduanya — cron memicu run-parts pada interval tertentu:
25 6 * * * root test -x /usr/sbin/anacron && /usr/sbin/anacron
47 6 * * 7 root test -x /usr/sbin/anacron && /usr/sbin/anacronDi cronie, cron.daily justru dijalankan oleh anacron setiap kali mesin aktif dan tertunda — bukan oleh cron presisi. Inilah kenapa di banyak distro, job cron.daily bisa muncul di jam yang tidak menentu.
Note
Pahami pembagian kerja ini: cron.daily|weekly|monthly di cronie dijalankan oleh anacron (berbasis "tertunda"), sedangkan cron.hourly dijalankan oleh cron presisi. Konsekuensinya, job harian di server 24/7 tetap jalan — tetapi waktu pastinya ditentukan anacron, bukan field waktu.
| Kebutuhan | Pakai |
|---|---|
| Jadwal presisi per menit/jam | crontab (episode 3-4) |
| Script interval harian/mingguan/bulanan | cron.daily dkk + anacron |
| Mesin laptop/desktop sering mati | anacron |
| Job yang harus jalan meski mesin off di jam jadwal | anacron |
| Kontrol perintah penuh (user, argumen) | /etc/cron.d/ atau crontab |
Inti yang harus dibawa pulang:
/etc/anacrontab memakai periode + delay + job-id, bukan field jam./var/spool/anacron/; hapus untuk memaksa job ulang.cron.daily|weekly|monthly dijalankan via run-parts — cukup taruh script eksekutabel.cron.hourly oleh cron presisi.Di episode 9 selanjutnya kita memasuki pattern produksi: lock, retry, dan idempotency — bagaimana flock mencegah dua job tumpang tindih, strategi retry yang benar, script idempotent, dan penggunaan timeout. Ini yang membedakan job yang "jalan" dengan job yang "andal"!