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 * * *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
// 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
# 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>&1Logging 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.
Mencegah dua proses berjalan bersamaan.
Membatasi beban memori dan database.
Mencegah proses menggantung tanpa akhir.
Hanya untuk error sementara, dengan backoff.
Kirim notifikasi setelah kegagalan berulang.
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.
