Cron, komutu seçtiğiniz zamanlarda seçtiğiniz kullanıcı hesabıyla çalıştırır. “Terminalde çalışıyor, cronda çalışmıyor” sorunu çoğunlukla farklı PHP yolu, çalışma dizini veya eksik ortam değişkeninden kaynaklanır. Aşağıdaki örnek bir PHP kuyruk görevi içindir.
1. Gerçek komutu terminalde doğrulayın
command -v php
php -v
cd /srv/ornek-uygulama
/usr/bin/php bin/queue.php
/usr/bin/php örnektir; command -v çıktısıyla değiştirin. Plesk üzerinde alan adının PHP sürümü ile SSH PHP sürümü farklı olabilir. Görevi web sitesinin kullanıcısıyla test edin; root olarak çalışan test, dosya izinlerini gizleyebilir.
2. Kullanıcı crontab kaydı ekleyin
crontab -e
Her beş dakikada bir çalıştırmak ve önceki işlem bitmeden yenisini başlatmamak için, yolları kendi projenize uyarlayıp tek satır ekleyin:
*/5 * * * * cd /srv/ornek-uygulama && /usr/bin/flock -n /srv/ornek-uygulama/var/queue.lock /usr/bin/php bin/queue.php >> /srv/ornek-uygulama/var/queue.log 2>&1
var dizini görev kullanıcısına yazılabilir olmalıdır. flock yolu için command -v flock kullanın. Bu kayıt crontab -e içindir; /etc/cron.d dosyalarında zaman sütunlarından sonra ayrıca kullanıcı sütunu bulunur.
3. Çalıştı mı, yalnızca tetiklendi mi?
crontab -l
tail -n 50 /srv/ornek-uygulama/var/queue.log
date
Görevin başlangıç ve bitiş zamanlarını, işlenen kayıt sayısını uygulama loguna yazdırın. Cron logunda komutun görünmesi işin başarılı bittiği anlamına gelmez. Sistem saati ile beklediğiniz yerel saati karşılaştırın.
Sık hata ve geri alma
Permission denied: dosya ve üst dizin erişimlerini kontrol edin. command not found: mutlak binary yolu kullanın. Çift kayıt: panelin zamanlanmış görevleri ile crontab listesini karşılaştırın. Görevi kapatmak için yalnızca eklediğiniz satırın başına # koyun; tüm crontab'ı silmeyin. Log dosyasına logrotate veya boyut sınırı ekleyin.
Zaman sütunları ve örnekler
| Kayıt | Anlam |
|---|---|
| */5 * * * * | Her beş dakikada bir |
| 30 4 * * * | Sunucu saatine göre her gün 04:30 |
| 0 9 * * 1 | Sunucu saatine göre pazartesi 09:00 |
Görev çıktısına date -Is ile zaman damgası eklemek saat dilimi sorununu ayırır. Sunucu UTC ise Türkiye'de beklenen saat farklı olabilir. Cron kaydı eklemeden önce date çıktısını kontrol edin; saat dilimini tüm sunucuda gelişigüzel değiştirmeyin.
Bilgiyi uygulanabilir projeye dönüştürelim.
İhtiyacınızı teknik, operasyonel ve ticari açıdan değerlendirip doğru çözüm yol haritasını birlikte oluşturalım.
Projenizi Anlatın



