15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
18.10.2024

cPanel’de Cron Job’lar Nasıl Yapılandırılır: Eksiksiz Teknik Kılavuz

Bir cron job, Unix benzeri işletim sistemlerinde yerleşik bir arka plan süreci olan cron daemon’ı tarafından yönetilen ve herhangi bir manuel tetikleyici olmaksızın komutları veya betikleri kesin, tekrarlayan aralıklarla çalıştıran zamanlanmış bir görevdir. cPanel’de Cron Jobs arayüzü, bu sistem düzeyindeki zamanlayıcıyı grafiksel bir ön uç aracılığıyla sunar ve komut satırına doğrudan dokunmadan veritabanı bakımından dosya temizliğine kadar her şeyi otomatikleştirmenize olanak tanır.

Bu kılavuz, tam yapılandırma yaşam döngüsünü kapsar: sözdizimi mekaniği, zamanlama stratejileri, çıktı yönetimi, gerçek dünya komut kalıpları ve çoğu öğreticinin tamamen atladığı operasyonel tuzaklar.

cron Daemon’ı Aslında Ne Yapar

crond süreci her dakika uyanır, sistemin crontab dosyalarını okur ve zamanlanmış herhangi bir görevin mevcut zamanla eşleşip eşleşmediğini kontrol eder. cPanel tarafından yönetilen paylaşımlı bir barındırma ortamında, her kullanıcının cron girişleri genellikle /var/spool/cron/<username> konumunda bulunan kullanıcı başına bir crontab dosyasında saklanır. cPanel’in arayüzü, bir iş eklediğinizde veya düzenlediğinizde doğrudan bu dosyaya yazar.

Bu mimariyi anlamak önemlidir çünkü birkaç davranışı açıklar:

  • * * * * * için zamanlanmış bir iş, her dakikanın başında tetiklenir, sürekli olarak değil.
  • Sunucu yeniden başlatılırsa veya crond dakika ortasında yeniden başlatılırsa, o dakika için zamanlanmış bir iş atlanır.
  • Açıkça yönlendirilmeyen çıktı, crond tarafından yakalanır ve crontab sahibine e-posta ile gönderilir; bu durum, yüksek frekanslı işlerde bir gelen kutusunu hızla doldurabilir.

Adım 1: cPanel’de Cron Jobs Arayüzüne Erişin

Barındırma sağlayıcınız tarafından sağlanan URL ve kimlik bilgilerini kullanarak cPanel hesabınıza giriş yapın (genellikle https://yourdomain.com:2083).

Kontrol panelinin içine girdikten sonra Gelişmiş bölümüne gidin ve Cron Jobs simgesine tıklayın. Bu, üç işlevsel alana bölünmüş zamanlayıcı arayüzünü açar:

  • Cron Email — iş çıktısının gönderildiği yer
  • Add New Cron Job — zamanlama formu
  • Current Cron Jobs — tüm yapılandırılmış girişlerin canlı listesi

cPanel zaten yüklü bir VPS yönetiyorsanız, aynı arayüz geçerlidir. AlexHost’un cPanel ile VPS ortamları, crond çalışır durumda ve kullanıcı crontab’ları varsayılan olarak etkin şekilde önceden yapılandırılmış olarak gelir.

Adım 2: Cron E-posta Bildirimlerini Yapılandırın

Cron Jobs sayfasının üst kısmındaki Cron Email alanı, crond‘ın her iş yürütmesinin standart çıktısını (stdout) ve standart hatasını (stderr) nereye göndereceğini belirler.

E-posta bildirimlerinin etkinleştirileceği durumlar:

  • Yeni bir işin ilk kurulumu ve testi sırasında
  • Sessiz başarısızlığın kabul edilemez olduğu kritik işler için (örn. gecelik yedeklemeler)

Çıktının bastırılacağı durumlar:

Yüksek frekanslı veya iyi test edilmiş işler için e-posta çıktısı gürültü oluşturur. Komutunuza aşağıdakini ekleyerek /dev/null‘a yönlendirin:

>/dev/null 2>&1

Bu, stdout‘ı /dev/null‘a yönlendirir ve ardından stderr‘ı stdout ile aynı hedefe yönlendirerek tüm çıktıyı etkili bir şekilde susturur. Yaygın bir hata 2>&1 >/dev/null yazmaktır — bu sıra yanlıştır ve stderr‘ı yine de posta sistemine gönderir.

Üretim işleri için daha iyi bir kalıp, e-posta almadan daha sonra denetleyebilmek için çıktıyı bir günlük dosyasına yönlendirmektir:

/usr/bin/php /home/user/public_html/script.php >> /home/user/logs/cron.log 2>&1

>> operatörü, her çalıştırmada üzerine yazmak yerine günlük dosyasına ekler.

Adım 3: Cron Zamanlama Sözdiziminde Ustalaşın

Her cron girişi, komuttan önce katı bir beş alan biçimini izler:

* * * * * command_to_execute
|   |   |   |   |
|   |   |   |   +--- Day of Week  (0–7, Sunday = 0 or 7)
|   |   |   +------- Month        (1–12)
|   |   +----------- Day of Month (1–31)
|   +--------------- Hour         (0–23)
+------------------- Minute       (0–59)

Özel Sözdizimi Operatörleri

Basit tam sayılar ve joker karakterlerin ötesinde, cron sözdizimi hassas zamanlamayı mümkün kılan dört operatörü destekler:

OperatörAnlamÖrnekSonuç
———-————————–
`*`Her birim`* * * * *`Her dakika
`,`Değer listesi`0 9,17 * * *`Her gün sabah 9:00 ve akşam 17:00’de
`-`Değer aralığı`0 9-17 * * *`Sabah 9’dan akşam 5’e kadar her saat
`*/n`Adım değeri`*/15 * * * *`Her 15 dakikada bir

Pratik Zamanlama Örnekleri

# Every 5 minutes
*/5 * * * *

# Every day at 2:30 AM
30 2 * * *

# Every Monday at 8:00 AM
0 8 * * 1

# First day of every month at midnight
0 0 1 * *

# Every weekday (Mon–Fri) at 6:00 PM
0 18 * * 1-5

# Twice a day, at noon and midnight
0 0,12 * * *

# Every 6 hours
0 */6 * * *

Kritik uç durum — Ayın Günü ile Haftanın Günü çakışması: Hem ayın günü hem de haftanın günü alanları * dışında bir değere ayarlandığında, crond bunları AND koşulu olarak değil, OR koşulu olarak değerlendirir. 0 0 1 * 1 olarak ayarlanmış bir iş, ayın birinde ve her Pazartesi çalışır — yalnızca ayın birinci gününe denk gelen Pazartesilerde değil. Bu durum birçok yöneticiyi şaşırtır.

Adım 4: Yeni Bir Cron Job Ekleyin

Add New Cron Job bölümünde cPanel, kolaylık sağlamak için önceden ayarlanmış zamanlama açılır menüleri sunar (Her Dakika, Her Saat, Her Gün vb.). Bu ön ayarlar yalnızca beş zamanlama alanını doldurur — özel zamanlamalar için bunları her zaman manuel olarak geçersiz kılabilirsiniz.

Doğru PHP İkili Yolunu Belirleme

cPanel cron job’larındaki en yaygın başarısızlık noktalarından biri, yanlış yorumlayıcı yolunun kullanılmasıdır. Sunucunun PATH ortamını devralan bir web isteğinin aksine, cron job’ları php‘ın tam bir yol olmadan çözümlenemeyebileceği minimal bir ortamda çalışır.

Sunucunuzdaki doğru PHP ikili dosyasını bulmak için cPanel’in Terminal aracı veya SSH aracılığıyla aşağıdakini çalıştırın:

which php

Çoğu cPanel sunucusunda sonuç şunlardan biri olacaktır:

/usr/bin/php
/usr/local/bin/php
/opt/cpanel/ea-php82/root/usr/bin/php

Barındırma sağlayıcınız birden fazla PHP sürümüyle EasyApache 4 kullanıyorsa, tam sürümlü ikili dosyayı belirtmeniz gerekir. Örneğin, PHP 8.2 kullanmak için:

/opt/cpanel/ea-php82/root/usr/bin/php -q /home/user/public_html/script.php

-q bayrağı, PHP CLI çıktısındaki HTTP başlıklarını bastırır; bu da e-posta bildirimlerinde veya günlük dosyalarında gereksiz verilerin görünmesini önler.

Tam Komutu Oluşturma

Bir PHP betiği için iyi biçimlendirilmiş bir cron komutu şöyle görünür:

/usr/local/bin/php -q /home/username/public_html/cron/task.php >> /home/username/logs/task.log 2>&1

Bir Bash betiği için, çalıştırılabilir olduğundan emin olun (chmod +x /path/to/script.sh) ve doğrudan referans verin:

/bin/bash /home/username/scripts/cleanup.sh >> /home/username/logs/cleanup.log 2>&1

Bir virtualenv kullanan Python betiği için:

/home/username/venv/bin/python /home/username/scripts/report.py >> /home/username/logs/report.log 2>&1

Zamanlama alanlarını ve komutu girdikten sonra Add New Cron Job‘a tıklayın. Giriş hemen Current Cron Jobs tablosunda görünür ve aktif hale gelir.

Adım 5: Mevcut Cron Job’ları Yönetin

Bir Cron Job’ı Düzenleme

Current Cron Jobs tablosunda, değiştirmek istediğiniz girişin yanındaki Edit‘e tıklayın. Zamanlama alanlarını veya komutu güncelleyin, ardından kaydetmek için Edit Line‘a tıklayın. Değişiklikler bir sonraki zamanlanmış çalıştırmada geçerli olur — yeniden başlatma gerekmez.

Bir Cron Job’ı Silme

Girişin yanındaki Delete‘e tıklayın ve onaylayın. Crontab satırı hemen kaldırılır.

Bir Cron Job’ı Silmeden Geçici Olarak Devre Dışı Bırakma

cPanel’in arayüzü yerel bir “duraklat” geçişi sağlamaz. Geçici çözüm, işi düzenlemek ve komutu, zamanlamayı korurken yürütmeyi önleyen bir no-op ile başa eklemektir. En temiz yöntem, gerçek komutu yorum benzeri bir yapıyla değiştirmektir:

# /usr/local/bin/php -q /home/user/public_html/script.php

Ancak cPanel, # karakterini kaldırabilir. Daha güvenilir bir yaklaşım, komutu geçici olarak şununla değiştirmektir:

/bin/true

Bu anında çalışır ve hiçbir şey yapmaz; orijinal komutu geri yükleyene kadar zamanlamayı korur.

Ham Crontab’ı Görüntüleme

SSH erişiminiz varsa, ham crontab’ı doğrudan inceleyebilir ve düzenleyebilirsiniz:

crontab -l

Düzenlemek için:

crontab -e

Bu, crontab’ı sistemin varsayılan düzenleyicisinde açar. Buradaki manuel düzenlemelerin cPanel’in arayüzüne yansıdığını ve bunun tersinin de geçerli olduğunu unutmayın — her ikisi de aynı dosyaya yazar.

Adım 6: Cron Job’larınızı Test Edin ve Doğrulayın

Bir cron job’ın kaydedildiği için çalıştığını asla varsaymayın. Cron’un çalıştığı ortam, etkileşimli bir kabuk oturumundan önemli ölçüde farklıdır.

Test Stratejisi

Adım 1 — Önce komutu manuel olarak çalıştırın. Herhangi bir şey zamanlamadan önce, hata olmadan beklenen çıktıyı ürettiğini doğrulamak için tam komutu SSH veya cPanel Terminal aracılığıyla çalıştırın:

/usr/local/bin/php -q /home/username/public_html/script.php

Adım 2 — İlk test için yüksek frekansta zamanlayın. İşi her dakika tetiklemek için zamanlamayı geçici olarak * * * * * olarak ayarlayın. Yürütmeyi onaylamak için 2-3 dakika sonra günlük dosyanızı veya e-postanızı kontrol edin.

Adım 3 — Günlük dosyasını kontrol edin. Çıktıyı bir günlük dosyasına yönlendirdiyseniz, inceleyin:

tail -f /home/username/logs/cron.log

Adım 4 — İşin temiz çalıştığını onayladıktan sonra doğru zamanlamayı geri yükleyin.

Yaygın Başarısızlık Nedenleri

  • Betiklerdeki göreli yollar: include 'config.php' kullanan bir betik, çalışma dizini betiğin dizini olmadığı için cron’da başarısız olur. Yolları betiğin konumuna göre çözümlemek için PHP’de __DIR__ veya Bash’te $(dirname "$0") kullanın.
  • Eksik ortam değişkenleri: Cron, .bashrc veya .bash_profile‘ı yüklemez. Betiğiniz ortam değişkenlerine bağımlıysa, bunları crontab’ın üst kısmında veya betiğin kendisinde açıkça tanımlayın.
  • İzin hataları: Betik, crontab sahibi tarafından okunabilir ve kabuk betikleri için çalıştırılabilir olmalıdır.
  • Veritabanı bağlantı hataları: Unix soketi aracılığıyla localhost kullanarak MySQL’e bağlanan betikler, soket yolu cron ortamında farklıysa başarısız olabilir. Bunun yerine açık bir port ile 127.0.0.1 kullanın.

Gerçek Dünya Cron Job Kalıpları

Otomatik Günlük Veritabanı Yedeklemesi

0 2 * * * /usr/bin/mysqldump -u dbuser -p'StrongPassword' dbname | gzip > /home/username/backups/db_$(date +%Y%m%d).sql.gz 2>> /home/username/logs/backup.log

Kaçan % karakterlerine (%) dikkat edin. % sembolü crontab dosyalarında özel bir anlam taşır (yeni satır olarak işlev görür), bu nedenle her zaman ters eğik çizgi ile kaçırılmalıdır.

Haftalık Günlük Döndürme ve Temizleme

0 3 * * 0 find /home/username/logs/ -name "*.log" -mtime +30 -delete >> /home/username/logs/cleanup.log 2>&1

Bu, her Pazar sabahı 3:00’te 30 günden eski günlük dosyalarını siler.

Zamanlanmış Önbellek Temizleme

0 */4 * * * /usr/local/bin/php -q /home/username/public_html/wp-cron.php >> /home/username/logs/wp-cron.log 2>&1

WordPress siteleri için, gerçek bir cron job aracılığıyla wp-cron.php çalıştırmak (ve wp-config.php‘a define('DISABLE_WP_CRON', true); ekleyerek varsayılan sahte cron’u devre dışı bırakmak), ziyaretçi tarafından tetiklenen yürütmeye güvenmekten çok daha güvenilirdir.

Zamanlanmış Rapor E-postası Gönderme

30 8 * * 1 /usr/local/bin/php -q /home/username/scripts/weekly_report.php >> /home/username/logs/report.log 2>&1

Her Pazartesi sabah 8:30’da çalışır. Bunu giden işlemsel posta için özel bir posta kutusuyla eşleştirin — AlexHost’un E-posta Barındırma hizmeti, otomatik gönderim için uygun izole SMTP altyapısı sağlar.

SSL Sertifikası Son Kullanma Tarihi Kontrolü

0 9 * * * /usr/bin/openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | /usr/bin/openssl x509 -noout -dates >> /home/username/logs/ssl_check.log 2>&1

Sertifikanızın geçerlilik tarihlerini kaydeden hafif bir günlük kontrol. Yönetilen SSL düzenleme ve yenileme için AlexHost’un SSL Sertifikaları hizmetini değerlendirin.

Cron Job’lar ile Alternatif Zamanlama Yaklaşımları

ÖzellikcPanel Cron JobsSystemd TimersHarici İzleme Cron’u (örn. EasyCron)
————————–—————-——————————————-
Gerekli erişim düzeyicPanel kullanıcısıRoot / sudoYok (web tabanlı)
Minimum aralık1 dakikaSaniyenin altı1 dakika (ücretsiz katman)
Kaçırılan iş yönetimiYerleşik yeniden deneme yok`Persistent=true` seçeneğiUyarı ve yeniden deneme mantığı
GünlüklemeManuel (dosyaya yönlendirme)`journald` (otomatik)Geçmişli kontrol paneli
Ortam izolasyonuMinimal kabuk ortamıTam systemd ortamıHarici HTTP çağrısı
Paylaşımlı barındırma için uygunEvetHayırEvet
VPS / dedicated için uygunEvetTercih edilenİsteğe bağlı ek

Bir Dedicated Server veya tam yönetilen bir VPS üzerinde iş yükleri çalıştıran ekipler için, kritik zamanlanmış görevleri cPanel cron’dan systemd timer’larına taşımak daha iyi günlükleme, bağımlılık yönetimi ve hata kurtarma sağlar. Paylaşımlı barındırma kullanıcıları için cPanel cron job’ları en pratik ve erişilebilir seçenek olmaya devam eder — AlexHost’taki Paylaşımlı Web Barındırma planları, standart cPanel arayüzü aracılığıyla tam cron job desteği içerir.

Cron Job’lar için Güvenlik Değerlendirmeleri

  • crontab -l ile tüm kullanıcılara görünür olan crontab girişlerine asla kimlik bilgilerini sabit kodlamayın. Veritabanı parolalarını chmod 600 ile korumalı bir yapılandırma dosyasında saklayın ve betiğin içinden referans verin.
  • Bir cron job harici verileri işliyorsa (örn. bir dizine bırakılan dosyalar) betik girdilerini doğrulayın. Otomatik bir bağlamda doğrulanmamış girdi önemli bir saldırı yüzeyi oluşturur.
  • Betik izinlerini gereken minimum düzeyde tutun. Yalnızca belirli bir dizine okuma ve yazma yapan bir PHP betiği, dünya tarafından okunabilir veya çalıştırılabilir olmamalıdır.
  • Cron job’larınızı periyodik olarak denetleyin. cPanel erişimi kazanan saldırganlar bazen kalıcı cron job’ları yükler. Herhangi bir şüpheli ihlalden sonra Current Cron Jobs listesini inceleyin.

Teknik Karar Kontrol Listesi

Herhangi bir cron job’ı üretime dağıtmadan önce aşağıdakilerin her birini doğrulayın:

  • Komut, tam olarak aynı sözdizimi ile SSH veya cPanel Terminal aracılığıyla manuel olarak çalıştırıldığında başarıyla çalışır.
  • Komuttaki ve betiğin kendisindeki tüm dosya yolları göreli değil, mutlaktır.
  • % karakteri, crontab komutunda göründüğü her yerde % olarak kaçırılmıştır.
  • Çıktı bir günlük dosyasına yönlendirilir veya açıkça bastırılır — cron e-posta adresini doldurmaya bırakılmaz.
  • PHP ikili yolu, uygulamanızın gerektirdiği sürümle eşleşir (which php ile onaylayın veya EasyApache ayarlarını kontrol edin).
  • Crontab kullanıcısının hedef betik üzerinde okuma ve çalıştırma izinleri vardır.
  • Cron ortamında Unix soket çözümlemesi güvenilir değilse, veritabanı bağlantıları localhost yerine 127.0.0.1 kullanır.
  • WordPress için: Gerçek bir cron job kullanarak wp-cron.php‘ı tetikliyorsanız wp-config.php‘da DISABLE_WP_CRON değeri true olarak ayarlanmıştır.
  • * * * * * ile bir test çalıştırması gerçekleştirildi ve günlük, son zamanlama uygulanmadan önce temiz yürütmeyi onayladı.

SSS

S: Cron job’ım cPanel’e kaydedilmiş olmasına rağmen neden çalışmıyor?

En yaygın nedenler yanlış ikili yoldur (örn. /usr/local/bin/php yerine php kullanmak), etkileşimli bir kabuk dışında başarısız olan göreli yola sahip bir betik veya betik dosyasında izin hatası. Sorunu izole etmek için önce tam komutu SSH aracılığıyla manuel olarak çalıştırın.

S: cPanel’de dakikada birden daha sık cron job çalıştırabilir miyim?

Hayır. Standart crond zamanlayıcısının bir dakikalık çözünürlüğü vardır. Dakika altı yürütme için, paylaşımlı barındırmada mevcut olmayan root erişimine ihtiyaç duyarsınız (döngüsel kabuk betiği veya systemd timer gibi bir geçici çözüm uygulamak için).

S: >/dev/null 2>&1 ne anlama gelir ve ne zaman kullanmalıyım?

Standart çıktıyı /dev/null‘a (atarak) yönlendirir ve ardından standart hatayı aynı hedefe yönlendirir. Bunu yalnızca sessiz başarısızlığın kabul edilebilir olduğu, iyi test edilmiş, kritik olmayan işlerde kullanın. Önemli herhangi bir şey için bunun yerine >> /path/to/file.log 2>&1 ile bir günlük dosyasına yönlendirin.

S: Cron job’ım SSH’da çalışıyor ama zamanlandığında neden başarısız oluyor?

Cron, kullanıcınızın kabuk profili olmadan soyulmuş bir ortamda çalışır. PATH‘ı, takma adları veya .bashrc‘da tanımlanan ortam değişkenlerini yüklemez. Tüm ikili dosyalar ve dosyalar için her zaman tam mutlak yollar kullanın ve gerekli ortam değişkenlerini betiğin içinde veya crontab girişinin üst kısmında açıkça tanımlayın.

S: Bir çalıştırma aralığından daha uzun sürerse, aynı cron job’ın iki örneğinin aynı anda çalışmasını nasıl önlerim?

İşi çalıştırmadan önce özel bir kilit almak için flock kullanın:

*/5 * * * * /usr/bin/flock -n /tmp/myjob.lock /usr/local/bin/php -q /home/username/public_html/script.php >> /home/username/logs/script.log 2>&1

-n bayrağı, kilit zaten tutuluyorsa flock‘ın hemen çıkmasına (engellemesiz) neden olur; bu da birinci örnek hâlâ çalışırken ikinci bir örneğin başlamasını önler.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın