Hosting & Sunucu

Cron job kılavuzu: sunucuda görev zamanlama

Bu kılavuzla Cron Job'u sıfırdan öğrenin: detaylı yapı, sık kullanılan komutlar, yaygın yol hataları ve profesyonel loglama. Sunucu yöneticileri ve web geliştiricileri için uygundur.

Hosting & Sunucu

Giriş: Cron Job Neden Sunucu Yönetimi İçin Gereklidir?

Gece yarısı uyanıp bir yedekleme betiği çalıştırmak zorunda kaldıysanız veya her gün sunucu loglarını elle temizlemek zorunda kaldıysanız, Cron Job ile tanışmanın zamanı geldi. Cron Job, Linux ve Unix işletim sistemlerinde, belirli zamanlarda tekrarlayan görevleri elle müdahale olmadan çalıştırmanıza olanak tanıyan bir zamanlama hizmetidir.

Bu makalede, bir Linux sunucunuz (örneğin Ubuntu 22.04 veya CentOS 7) olduğunu ve Cron Job'u nasıl yapılandıracağınızı, yaygın hatalardan nasıl kaçınacağınızı ve görev çıktılarını nasıl doğru bir şekilde yöneteceğinizi öğrenmek istediğinizi varsayıyoruz. Bu kılavuz, sunucu yöneticileri, web geliştiricileri ve Linux sunucularla çalışan herkes için faydalıdır.

Cron Job'un Detaylı Yapısı: Her Alan Ne Anlama Gelir?

Crontab dosyasındaki her satır, boşluklarla ayrılmış altı alandan oluşur. İlk beş alan çalışma zamanını belirtir ve altıncı alan çalıştırılacak komuttur. Genel yapı şu şekildedir:

* * * * * /yol/komut

Her alanın soldan sağa anlamı:

  • Dakika (Minute): 0 ile 59
  • Saat (Hour): 0 ile 23
  • Ayın Günü (Day of Month): 1 ile 31
  • Ay (Month): 1 ile 12 veya ayın İngilizce adı (jan, feb, ...)
  • Haftanın Günü (Day of Week): 0 ile 7 (0 ve 7 Pazar'dır) veya gün adı (sun, mon, ...)
  • Komut (Command): Çalıştırılabilir dosyanın veya betiğin tam yolu

* işareti "her değer" anlamına gelir. Örneğin, * * * * * her dakika çalıştırılması demektir.

Zamanlama İçin Pratik Örnekler

Daha iyi anlamak için birkaç gerçek örnek verelim:

  • Her gün saat 03:00'te çalıştırma: 0 3 * * * /usr/local/bin/backup.sh
  • Her 15 dakikada bir çalıştırma: */15 * * * * /usr/bin/php /var/www/html/cron.php
  • Her Pazartesi saat 08:00'de çalıştırma: 0 8 * * 1 /opt/scripts/report.sh
  • Her ayın ilk günü çalıştırma: 0 0 1 * * /root/scripts/monthly_cleanup.sh

İkinci örnekte, "her 15 dakika" anlamına gelen */15 kullanıldığına dikkat edin. Bu, düzenli aralıklarla tekrarlamak için yaygın bir yöntemdir.

Crontab Düzenleme: Temel Komutlar

Cron Job'ları yönetmek için crontab komutunu kullanırız. En önemli komutlar şunlardır:

  • crontab -e: Geçerli kullanıcının crontab dosyasını düzenleme (nano veya vim gibi varsayılan düzenleyici ile)
  • crontab -l: Mevcut crontab içeriğini görüntüleme
  • crontab -r: Geçerli kullanıcının crontab'ını tamamen silme (dikkatli kullanın!)
  • crontab -u kullanıcıadı -e: Başka bir kullanıcının crontab'ını düzenleme (sadece root)

crontab -e komutunu ilk kez çalıştırdığınızda, sistem hangi düzenleyiciyi kullanmak istediğinizi sorar. Nano'yu seçmenizi öneririm çünkü daha basittir.

Yaygın Hata: Tam Yolu Unutmak

Cron Job'da en yaygın hatalardan biri, komutlar için mutlak yol (absolute path) kullanmamaktır. Cron Job'un çalışma ortamı, terminal ortamınızdan farklıdır ve PATH değişkeni daha sınırlıdır. Örneğin, terminalde php script.php yazmak çalışır, ancak Cron Job'da /usr/bin/php /home/user/script.php yazmalısınız.

Bir komutun tam yolunu bulmak için which kullanın:

which php
# Çıktı: /usr/bin/php

Ayrıca crontab dosyasının başında PATH değişkenini ayarlayabilirsiniz:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Cron Job Çıktısını Loglama: Çıktıyı Neden Göremiyorum?

Yaygın sorunlardan biri, betiğin Cron Job'da çalışması ancak çıktısını görememenizdir. Bunun nedeni, Cron Job'un çıktıyı görev sahibine e-posta ile göndermesi (e-posta ayarlanmışsa) veya atmasıdır. Çıktıyı yönetmek için birkaç yöntem vardır:

Birinci Yöntem: Çıktıyı Bir Log Dosyasına Yönlendirme

> ve >> operatörlerini kullanarak çıktıyı bir dosyaya yönlendirebilirsiniz:

0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Bu komutun açıklaması:

  • >>: Çıktıyı dosyanın sonuna ekler (append)
  • 2>&1: Standart hataları (stderr) standart çıktıya (stdout) yönlendirir, böylece her şey tek bir dosyaya kaydedilir

Log dosyasını her seferinde yeniden yazmak (overwrite) istiyorsanız, > kullanın.

İkinci Yöntem: Syslog'a Göndermek İçin logger Kullanma

Logların merkezi bir sistemde kaydedilmesini istiyorsanız, logger komutunu kullanın:

0 3 * * * /usr/local/bin/backup.sh | logger -t backup_script

Bu, logları backup_script etiketiyle syslog'a gönderir. Bunları journalctl -t backup_script ile görebilirsiniz.

Üçüncü Yöntem: E-postayı Devre Dışı Bırakma

E-posta gönderilmesini istemiyorsanız, çıktıyı /dev/null'a yönlendirin:

0 3 * * * /usr/local/bin/backup.sh > /dev/null 2>&1

Bu, önemli çıktısı olmayan görevler (örneğin önbellek temizleme) için uygundur.

Cron Job'da Yaygın Hatalar ve Sorun Giderme

Yukarıdaki noktalara dikkat etseniz bile, Cron Job'unuz çalışmayabilir. İşte en yaygın sorunlar ve çözümleri:

Sorun 1: Betik Çalışmıyor

İlk adım, Cron loglarını kontrol etmektir. Çoğu Linux dağıtımında, Cron logları /var/log/cron veya /var/log/syslog içinde kaydedilir. Aşağıdaki komutla son hataları görebilirsiniz:

grep CRON /var/log/syslog | tail -20

(CRON) info (No MTA installed) gibi bir hata görürseniz endişelenmeyin; bu sadece e-posta hizmetinin olmadığı anlamına gelir ve görevin çalışmasını etkilemez.

Sorun 2: Betik Çalışıyor Ama Hata Veriyor

Bazen betik çalışır ancak eksik ortam değişkenleri nedeniyle hatalı çalışır. Cron ortamını simüle etmek için aşağıdaki komutu kullanabilirsiniz:

env -i HOME=$HOME PATH=/usr/bin:/bin USER=$USER /bin/bash -l -c '/yol/betik'

Bu komut, minimum ortam değişkenleriyle bir login kabuğu çalıştırır ve olası hataları gösterir.

Sorun 3: Çalıştırma İzni (Permission)

Betiğinizin çalıştırma iznine sahip olduğundan emin olun:

chmod +x /yol/betik.sh

Ayrıca, Cron Job'u çalıştıran kullanıcının (genellikle normal kullanıcı veya root) gerekli dosya ve dizinlere erişimi olmalıdır.

Sorun 4: Ortam Değişkenlerini Kullanma

Betiğiniz $HOME veya $USER gibi ortam değişkenlerini kullanıyorsa, bunlar Cron Job'da tanımlı olmayabilir. En iyi yol, gerekli değişkenleri betiğin başında tanımlamak veya mutlak yollar kullanmaktır.

Profesyonel Cron Job İçin İleri Düzey İpuçları

Çok sayıda göreviniz varsa veya daha hassas kontrol ihtiyacınız varsa, şu ipuçlarını göz önünde bulundurun:

/etc/cron.* İçindeki Cron Dosyalarını Kullanma

Kullanıcı crontab'ını düzenlemek yerine, betiklerinizi aşağıdaki dizinlere yerleştirebilirsiniz:

  • /etc/cron.hourly/: Her saat çalışan betikler
  • /etc/cron.daily/: Günlük betikler
  • /etc/cron.weekly/: Haftalık betikler
  • /etc/cron.monthly/: Aylık betikler

Betiğinizi ilgili dizine yerleştirmeniz ve çalıştırma iznine sahip olduğundan emin olmanız yeterlidir. Bu yöntem, sistem görevleri için çok uygundur.

Sürekli Açık Olmayan Sunucular İçin anacron Kullanma

Sunucunuz bazen kapanıyorsa (örneğin bir dizüstü bilgisayar), anacron kullanın. anacron, görevlerin belirtilen zamanda çalıştırılamasa bile, bir sonraki fırsatta çalıştırılmasını garanti eder. Kurulum için:

sudo apt install anacron  # Debian/Ubuntu'da

Görevleri systemd timer ile Yönetme

Modern Linux dağıtımlarında, Cron Job yerine systemd timer kullanabilirsiniz. Bu yöntem, daha iyi loglama ve daha hassas bağımlılıklar gibi avantajlar sunar. Ancak Cron Job hala en basit ve en yaygın kullanılan yöntemdir.

Özet: Cron Job'u Ciddiye Alın

Cron Job, doğru kullanıldığında saatlerce zaman kazandırabilecek güçlü ve basit bir araçtır. Bu makaledeki ipuçlarına – mutlak yollar kullanma, uygun loglama ve sistematik sorun giderme – dikkat ederek, görevlerinizi sorunsuz bir şekilde zamanlayabilirsiniz.

Zamanlanmış betiklerinizi çalıştırmak için güvenilir bir barındırma hizmeti arıyorsanız, ServerNet, sanal ve özel sunucularıyla bu iş için uygun bir platform sağlar. Ancak hizmet seçiminden daha önemlisi, bu makalede ele aldığımız Cron Job'u temelinden öğrenmektir.

Şimdi sıra sizde: Cron Job ile günlük yedekleme gibi basit bir görev ayarlayın ve otomasyonun keyfini çıkarın. Bir sorunla karşılaşırsanız, bu makalenin sorun giderme bölümüne başvurun.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

İletişim
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın