Ubuntu'da Cron Job Oluşturma Adım Adım Rehber

UbuntuYayın: Güncellendi: 11 dk okumaHazırlayan: cronjob.com.tr Editörleri

Ubuntu, bulut sunuculardan kurumsal veri merkezlerine kadar Linux ekosisteminde yaygın tercih edilen işletim sistemlerinden biridir. Ubuntu Server üzerinde web uygulamaları, veritabanı rutinleri, API entegrasyonları ve otomatik sistem güncellemeleri yürütülürken zamanlanmış görevlerin istikrarlı çalışması kritik bir gereksinimdir. Arka planda periyodik yürütme mekanizmasını yöneten temel araç ise cron servisidir. Zamanlama ilkeleri hakkında temel bir başlangıç yapmak isterseniz kapsamlı cron job nedir rehberimize başvurabilirsiniz.

Ubuntu 22.04 LTS (Jammy Jellyfish) ve modern Ubuntu 24.04 LTS (Noble Numbat) sürümlerinde cron yönetiminin temel yapısı benzerdir. Kullanılan sunucu imajında rsyslog paketinin bulunup bulunmaması, log takibi yöntemlerini doğrudan etkiler. Bununla birlikte Debian ve Ubuntu ailesine özgü run-parts yürütme kuralı, kısıtlı $PATH ortamı ve metin düzenleyici tercihleri sistem yöneticilerinin sıklıkla karşılaştığı tuzaklar arasında yer alır.

Sistem otomasyonunun genel prensiplerini ele aldığımız Linux cron job kılavuzundan farklı olarak bu makalede, Ubuntu'ya özgü paket yönetimi, cron.hourly/daily dizin standartları, modern systemd journal log takibi ve pratik sorun giderme yöntemleri adım adım aktarılmaktadır.

Ubuntu Linux'ta Cron Mimarisi ve Paket Durumu

Ubuntu ve Debian tabanlı dağıtımlarda cron işlevselliği doğrudan cron paketi üzerinden sağlanır. RHEL ve CentOS dağıtımlarında görülen cronie ve crond adlandırmaları burada geçerli değildir; sistemdeki arka plan servis adı doğrudan cron veya cron.service olarak tanımlanmıştır. İki dağıtım ailesi arasındaki yapılandırma farklılıklarını merak ediyorsanız CentOS cron job incelememize göz atabilirsiniz.

Ubuntu üzerinde cron görevleri iki ana katmanda çalışır: kullanıcı seviyesindeki bireysel crontab dosyaları ve sistem seviyesindeki merkezi cron dizinleri. Kullanıcı dosyaları /var/spool/cron/crontabs/ altında kullanıcı adına göre saklanır ve dosya izinleri 0600 ile korunur. Sistem seviyesindeki görevler ise /etc/crontab dosyasında ve /etc/cron.d/ dizini altında yürütülür. Sistem seviyesindeki crontab satırlarında, standart 5 zaman alanının hemen ardından görevi hangi kullanıcının çalıştıracağını belirten bir kullanıcı adı alanı (örneğin root veya www-data) yer alır.

Adım Adım Kurulum: Cron Servisinin Kontrolü ve Başlatılması

Ubuntu Server kalıplarında cron paketi çoğunlukla önceden yüklü olarak gelir. Ancak minimal bulut kalıplarında veya konteyner imajlarında paketin kurulu ve aktif olduğunu doğrulamak gerekir. Görevlerinizi devreye almadan önce şu adımları izleyin:

  1. Paket Durumunu Kontrol Edin: Sisteminize paket yöneticisi üzerinden cron aracının kurulu olup olmadığını denetleyin:
    dpkg -l | grep -w cron
  2. Eksikse Paketi Kurun: Paket listesinde görünmüyorsa APT aracılığıyla kurulumu tamamlayın:
    sudo apt update && sudo apt install cron -y
  3. Servisi Başlatın ve Açılışa Ekleyin: Servisi derhal etkinleştirmek için systemctl komutunu uygulayın:
    sudo systemctl enable --now cron
  4. Çalışma Durumunu Denetleyin: Servisin arka planda sorunsuz çalıştığını doğrulayın:
    systemctl status cron

systemctl status cron ile Servis Yönetimi

Servisin durumunu sorguladığınızda çıktıda Active: active (running) ibaresi yer almalıdır. Servis durdurulmuşsa görevler tetiklenmez. Cron servisinde yapılan ana konfigürasyon değişiklikleri sonrasında servisi yeniden başlatmak için sudo systemctl restart cron, sistem açılışındaki otomatik başlatmayı kontrol etmek için ise sudo systemctl is-enabled cron komutları kullanılır.

Crontab Dosyasını Düzenleme ve Editör Seçimi (select-editor)

Ubuntu üzerinde ilk kez crontab -e komutunu çalıştırdığınızda işletim sistemi sizden bir metin düzenleyici seçmenizi ister. Karşınıza nano, vim.basic ve ed seçeneklerini içeren numaralı bir liste gelir. Çoğu kullanıcı kazara alışık olmadığı bir editörü (örneğin nano yerine vim veya ed) seçebilir ve dosyayı kaydetmekte zorlanabilir.

Varsayılan düzenleyici tercihinizi istediğiniz an değiştirmek için Ubuntu'nun sunduğu pratik yardımcı komutu çalıştırabilirsiniz:

select-editor

Bu komut seçiminizi kullanıcınızın ev dizinindeki ~/.selected_editor dosyasına yazar. Düzenleyici belirlendikten sonra crontab işlemlerini yönetmek için temel parametreler şunlardır:

Ubuntu'ya Özel Dizin Yapısı: run-parts ve İsimlendirme Kuralları

Ubuntu, periyodik bakım betiklerini kolayca organize edebilmeniz için /etc/ altında özel dizinler barındırır. Bu dizinler sistem crontab'ı tarafından periyodik olarak taranır:

Kritik Uyarı (run-parts Kuralı): /etc/cron.daily veya hourly dizinlerine koyduğunuz betikler sistem tarafından run-parts aracı ile çağrılır. run-parts aracı, dosya adlarında nokta (dot) karakterine izin vermez. Örneğin yedek.sh veya temizlik.py adındaki bir dosya tamamen yok sayılır ve çalıştırılmaz. Dosya adı yalnızca küçük-büyük harf, rakam, alt tire ve tire içermelidir (Regex: ^[a-zA-Z0-9_-]+$). Dolayısıyla dosyanızı yedek veya sistem-temizlik olarak adlandırmalı ve chmod +x ile çalıştırma izni vermelisiniz.

Ubuntu 22.04 ve 24.04'te Cron Loglarını İzleme (journalctl vs rsyslog)

Ubuntu 22.04 LTS ve önceki sürümlerde cron logları varsayılan olarak geleneksel syslog dosyasına kaydedilmekteydi. Sistem yöneticileri aşağıdaki komutla cron aktivitelerini süzebiliyordu:

# Ubuntu 22.04 ve öncesinde log takibi:
sudo grep CRON /var/log/syslog
sudo tail -f /var/log/syslog | grep CRON

Ubuntu 24.04 LTS (Noble Numbat) üzerinde /var/log/syslog dosyasının varlığı, kullanılan imaja ve rsyslog yapılandırmasına bağlıdır. rsyslog bulunmayan sistemlerde cron kayıtları systemd-journald üzerinden incelenebilir. Ubuntu 24.04'te cron loglarını incelemenin modern ve doğru yolu systemd journal aracını kullanmaktır:

# Ubuntu 24.04'te cron servis loglarını canlı izleme:
sudo journalctl -u cron.service -f

# Yalnızca bugüne ait cron kayıtlarını listeleme:
sudo journalctl -u cron.service --since today

# Belirli bir zaman aralığındaki hataları süzme:
sudo journalctl -u cron.service --since "1 hour ago" -p err

Eğer eski alışkanlıklarınızı sürdürmek ve logları metin dosyasında toplamak isterseniz sudo apt install rsyslog -y komutuyla rsyslog servisini kurabilir ve /etc/rsyslog.d/50-default.conf dosyasında cron satırının başındaki diyez (#) işaretini kaldırabilirsiniz.

Gerçek Kod Örnekleri

Aşağıda Ubuntu ortamında sıkça kullanılan gerçek hayat senaryolarına uygun hazır betikler yer almaktadır.

Gece Yarısı Yedekleme ve Log Çıktısı Alma Scripti

Aşağıdaki crontab satırı, web uygulamasının yedek betiğini her gece 03:30'da çalıştırır, standart çıktıyı ve hata çıktılarını ayrı bir log dosyasına tarih damgasıyla yazar:

# Root crontab (sudo crontab -e) içine eklenecek satır
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
30 3 * * * /home/ubuntu/scripts/gece_yedek.sh >> /var/log/yedekleme.log 2>&1

Tam veritabanı dump'ı (mysqldump/pg_dump), parola dosyası ve 14 günlük rotasyon için cron ile veritabanı yedekleme betiklerini aynı gece penceresine bağlayabilirsiniz. Bu görevin çağırdığı /home/ubuntu/scripts/gece_yedek.sh betiğinin içeriği:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/web"
DATE_TAG="$(date +'%Y-%m-%d_%H%M%S')"
TARGET_ARCHIVE="${BACKUP_DIR}/site_backup_${DATE_TAG}.tar.gz"

mkdir -p "${BACKUP_DIR}"

echo "[*] [$(date)] Yedekleme süreci başlatılıyor..."

# Web dizinini arşivle
tar -czf "${TARGET_ARCHIVE}" -C /var/www/html .

echo "[OK] [$(date)] Arşiv oluşturuldu: ${TARGET_ARCHIVE}"

# 7 günden eski yedekleri otomatik temizle
find "${BACKUP_DIR}" -type f -name "site_backup_*.tar.gz" -mtime +7 -delete
echo "[OK] [$(date)] Eski yedekler temizlendi."

Aynı sunucuda şişen /var/log dosyalarını budamak için cron log temizleme kurallarını yedek betiğinden ayrı bir satıra koyun; yedek ve log rotasyonunu tek işe bağlamak teşhisi zorlaştırır. TLS sertifikası yenilemesini de ayrı tutun: cron ile SSL yenileme rehberindeki certbot/nginx reload sırası Ubuntu'da cron.daily yerine kullanıcı crontab'ında daha öngörülebilirdir.

Ubuntu 24.04 İçin rsyslog Olmadan Journalctl ile Log İzleme

Ubuntu 24.04 sunucularda cron işlemlerinin başlatılma ve servis hata kayıtlarını listeleyen pratik bir izleme betiği:

#!/usr/bin/env bash
set -euo pipefail

echo "=== Son 1 Saatteki Ubuntu Cron Aktiviteleri ==="

# Son 1 saat içindeki cron çalışmalarını listele
journalctl -u cron.service --since "1 hour ago" --no-pager | grep -E "CMD|RELOAD" || echo "Son 1 saatte çalışan cron görevi bulunamadı."

echo ""
echo "=== Son 24 Saatteki Olası Hata Kayıtları ==="
journalctl -u cron.service --since "24 hours ago" -p warning..emerg --no-pager || echo "Herhangi bir kritik hata tespit edilmedi."

Sık Karşılaşılan Hatalar ve Çözümleri

Ubuntu üzerinde cron yapılandırması yaparken karşınıza çıkabilecek 4 yaygın hata ve kesin çözüm yolları:

1. crontab: no crontab for user - using an empty one

Nedeni: Bu bir hata değil, kullanıcının ilk kez crontab -e komutunu çalıştırması durumunda Ubuntu'nun verdiği bilgilendirme mesajıdır. Kullanıcının henüz /var/spool/cron/crontabs/ dizininde bir dosyası bulunmadığını belirtir.
Çözümü: Açılan metin editöründe görevinizi yazıp dosyayı kaydedip çıktığınızda (nano için Ctrl+O, Enter ardından Ctrl+X) dosya otomatik olarak oluşturulur ve sonraki açılışlarda bu mesaj görüntülenmez.

2. /etc/cron.daily/my_script.sh çalışmıyor

Nedeni: Betik dosyasının adında .sh gibi bir uzantı veya nokta karakteri yer almaktadır. Ubuntu'da run-parts aracı yalnızca ^[a-zA-Z0-9_-]+$ biçimindeki adları kabul eder.
Çözümü: Dosya adındaki uzantıyı kaldırın: sudo mv /etc/cron.daily/my_script.sh /etc/cron.daily/my-script ve çalıştırma iznini tazeleyin: sudo chmod +x /etc/cron.daily/my-script.

3. /bin/sh: command not found

Nedeni: Cron ortamı, kullanıcının interaktif terminalindeki zengin $PATH değişkenini yüklemez. Varsayılan olarak yalnızca /usr/bin:/bin yollarını tanır. /usr/local/bin altındaki NodeJS, Python sanal ortamı veya Composer gibi araçlar doğrudan çağrıldığında bulunamaz.
Çözümü: Ya komutun tam mutlak yolunu yazın (örneğin /usr/local/bin/node) ya da crontab dosyanızın en üst satırına şu ortam tanımını ekleyin: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin. Daha kapsamlı rehberlik için cron job çalışmıyor makalemizi inceleyebilirsiniz.

4. MTA not installed, discarding output

Nedeni: Cron, çalıştırdığı betiklerin ekrana bastığı çıktıları yerel e-posta mekanizması (MTA - Mail Transfer Agent, örn: Postfix, Sendmail) ile sistem yöneticisine göndermek ister. Ubuntu minimal sunucularda MTA kurulu değilse bu uyarı günlüklere düşer.
Çözümü: Eğer e-posta bildirimi istemiyorsanız crontab dosyasının en başına MAILTO="" satırını ekleyin veya betik satırının sonuna çıktı yönlendirmesi tanımlayın: > /dev/null 2>&1.

cronjob.com.tr ile HTTP Tabanlı Alternatif Kurulum (Ubuntu Sunucusunu Yormayan Dış Tetikleme)

Ubuntu üzerinde yerel cron servisleriyle çalışmak; kısıtlı PATH değişkenleri, run-parts dosya adı sınırlamaları, log kaybolmaları ve arka planda kilitlenen süreçler nedeniyle ek bir bakım maliyeti doğurur. Özellikle konteyner mimarilerinde (Docker) veya geçici bulut sunucularında arka plan servisi çalıştırmak yerine işlerinizi bir HTTP API uç noktası üzerinden yönetmek çok daha esnek bir yaklaşımdır.

cronjob.com.tr, sunucunuzdaki yerel crontab yapılandırmasına ihtiyaç duymadan, belirlediğiniz zaman aralıklarında web uygulamanızın URL'ine güvenli HTTP istekleri (GET, POST vb.) göndererek görevlerinizi dışarıdan tetikler.

Örneğin Ubuntu üzerinde çalışan bir PHP uygulamasında görevlerinizi korumalı bir uç nokta haline getirebilirsiniz:

<?php
// /var/www/html/api/periyodik-gorev.php
declare(strict_types=1);

// cronjob.com.tr tarafından iletilen özel başlığı kontrol et
$expectedToken = 'f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6';
$receivedToken = $_SERVER['HTTP_X_CRON_AUTH'] ?? '';

if (!hash_equals($expectedToken, $receivedToken)) {
    http_response_code(401);
    echo json_encode(['hata' => 'Yetkisiz erişim denemesi.']);
    exit;
}

// Görev mantığı: Örn. veritabanı temizliği ve bildirim gönderimi
$rapor = [
    'durum' => 'tamamlandi',
    'guncellenen_kayit' => 58,
    'zaman' => date('Y-m-d H:i:s')
];

http_response_code(200);
header('Content-Type: application/json');
echo json_encode($rapor);

cronjob.com.tr hizmetinin Ubuntu kullanıcılarına sağladığı başlıca avantajlar:

Sıkça Sorulan Sorular (SSS)

Ubuntu'da cron servisinin adı nedir?

Ubuntu ve Debian tabanlı sistemlerde arka plan servis adı doğrudan cron olarak adlandırılır; RHEL ve CentOS ailesinde görülen crond adlandırması burada geçerli değildir.

select-editor komutu ne işe yarar?

select-editor komutu crontab -e çalıştırıldığında sistemin açacağı varsayılan metin editörünü (nano, vim veya ed) kullanıcı bazında kolayca seçmenizi ve ~/.selected_editor dosyasına kaydetmenizi sağlar.

/etc/cron.daily içine atılan script neden çalışmaz?

/etc/cron.daily içindeki betikler run-parts aracıyla yürütülür; dosya adında .sh gibi noktalı uzantı bulunması veya çalıştırma izninin (chmod +x) eksik olması betiğin tamamen yok sayılmasına neden olur.

Ubuntu 24.04'te cron logları nerede?

Ubuntu 24.04 üzerinde cron kayıtları journalctl -u cron.service komutuyla izlenebilir; rsyslog kurulu ve yapılandırılmışsa /var/log/syslog dosyasında da bulunabilir.

Sonuç

Ubuntu 22.04 ve 24.04 sistemlerinde cron yönetimi; doğru paket adı (cron), run-parts isimlendirme standartları, select-editor yapılandırması ve journalctl tabanlı log takibi gibi inceliklere dikkat edildiğinde son derece kararlı çalışır. Sunucunuzda crontab sözdizimi ve yerel servis riskleriyle uğraşmak istemediğinizde cronjob.com.tr dış tetikleme çözümünü güvenle devreye alabilirsiniz.

Hemen Ücretsiz Cron Job Oluşturun

Ubuntu uygulamanızdaki bakım uç noktasını HTTPS üzerinden cronjob.com.tr ile zamanlayın; PATH ve run-parts tuzaklarına düşmeden dakikalık aralık, e-posta uyarısı ve 7 günlük yanıt logu alın. Ücretsizdir; kayıtta kredi kartı istenmez.

Ücretsiz Başla →

İlgili Rehberler