Back to Blog DevOps & Scalability

Otomatisasi Backend dengan Cron Job

Cron cocok untuk pekerjaan terjadwal: membuat laporan harian, membersihkan token kedaluwarsa, mengirim pengingat, atau menjalankan backup. Ia bukan tempat menjalankan request web yang panjang.

15 2 * * *
menit 15jam 02setiap hari

Buat command yang dapat dijalankan ulang

Tugas terjadwal sebaiknya idempotent: dijalankan dua kali tidak menghasilkan pembayaran ganda atau email berulang. Simpan penanda eksekusi pada data yang diproses.

PHP
<?php
// bin/send-reminders.php
require dirname(__DIR__).'/bootstrap.php';
$lock = fopen(sys_get_temp_dir().'/send-reminders.lock', 'c');
if (!$lock || !flock($lock, LOCK_EX | LOCK_NB)) {
    exit("Another process is running
");
}
$jobs = $repository->findUnsentReminders(100);
foreach ($jobs as $job) {
    $mailer->sendReminder($job);
    $repository->markSent($job->id);
}

Daftarkan cron dengan path absolut

Bash
# buka editor cron
crontab -e
# jalankan setiap hari pukul 02:15
15 2 * * * /usr/bin/php /var/www/app/bin/send-reminders.php >> /var/log/app/reminders.log 2>&1

Logging dan status keluar

Command harus menulis log yang bisa ditelusuri dan mengembalikan exit code non-zero ketika gagal. Monitoring dapat mendeteksi job yang tidak berjalan berdasarkan heartbeat atau waktu eksekusi terakhir.

Lock

Mencegah dua proses berjalan bersamaan.

Batch

Membatasi beban memori dan database.

Timeout

Mencegah proses menggantung tanpa akhir.

Retry

Hanya untuk error sementara, dengan backoff.

Alert

Kirim notifikasi setelah kegagalan berulang.

Audit

Catat item mana yang berhasil diproses.

Kapan pindah ke queue?

Jika setiap item perlu retry terpisah, volume tidak dapat diprediksi, atau beberapa worker harus berjalan paralel, cron cukup menjadi pemicu dan pekerjaan sebenarnya dimasukkan ke queue.

Share this article

Related articles

Copied