🚀 BAŞTAN SONA BASH SCRIPTING BÖLÜM-9: Cron Jobs (Zamanlanmış Görevler) ve Arka Plan Yönetimi ⏰

Konu Özeti

Bash scripting serisinin 9. bölümünde, cron jobs ile zamanlanmış görevlerin nasıl tanımlanacağı, crontab sözdizimi, arka plan süreç yönetimi için & ve nohup kullanımı, log yönlendirme ve otomatik yedekleme betiği örneği ele alınıyor. Her gece belirlenen dizini sıkıştırıp tarih etiketiyle yedekleyen ve eski yedekleri temizleyen uygulamalı bir betik sunuluyor.

🚀 BAŞTAN SONA BASH SCRIPTING BÖLÜM-9: Cron Jobs (Zamanlanmış Görevler) ve Arka Plan Yönetimi ⏰

Selamlar! Serimizin 9. bölümüne hoş geldiniz.

Önceki bölümde `$?` çıkış kodlarını, `set -euo pipefail` ile katı güvenlik modunu ve `trap` ile sinyal yakalamayı öğrenmiştik. Bu bölümde ise betiklerimizi otomatik zaman aralıklarıyla arka planda çalıştıracak olan **Cron Jobs (`crontab`)**, **Arka Plan Süreç Yönetimi (`&`, `nohup`)** ve **Log Yönlendirme** konularını işleyeceğiz.

---

⏰ 1. Cron ve Crontab Nedir? 🗓️

Linux sistemlerde belirli zamanlarda veya periyotlarda (her gece 03:00'te, her saat başı, her pazartesi vb.) otomatik olarak çalışması gereken görevlere **Cron Job** denir.

Bu görevler `crontab` (cron table) adı verilen konfigürasyon dosyalarında tutulur.

### Crontab Yönetim Komutları:
- `crontab -e`: Mevcut kullanıcının crontab dosyasını düzenler (edit).
- `crontab -l`: Tanımlı cron görevlerini listeler.
- `crontab -r`: Tüm cron görevlerini siler.

---

📐 2. Cron Zaman Sözdizimi (Syntax) 🧩

Crontab içindeki her satır 5 adet zaman parametresi ve ardından çalıştırılacak komut/betik yolundan oluşur:

* * * * * /yol/betik.sh
│ │ │ │ │
│ │ │ │ └─ Haftanın Günü (0 - 6) (0 = Pazar)
│ │ │ └─── Ay (1 - 12)
│ │ └───── Ayın Günü (1 - 31)
│ └─────── Saat (0 - 23)
└───────── Dakika (0 - 59)

### Özel İşaretler:
• `*` (Yıldız): Her zaman birimi anlamına gelir (Her dakika, her saat...).
• `,` (Virgül): Birden fazla değer belirtmek için (Örn: `1,15,30`).
• `-` (Tire): Aralık belirtmek için (Örn: `1-5` -> Pazartesi'den Cuma'ya).
• `/*` (Bölü): Periyot belirtmek için (Örn: `*/15` -> Her 15 dakikada bir).

Örnek Cron Zamanlamaları:
- `0 3 * * *` -> Her gece saat 03:00'te çalışır.
- `*/15 * * * *` -> Her 15 dakikada bir çalışır.
- `0 9 * * 1` -> Her Pazartesi sabah 09:00'da çalışır.
- `0 0 1,15 * *` -> Her ayın 1'inde ve 15'inde gece yarısı çalışır.

---

🛡️ 3. Betikleri Cron İçin Hazırlama ve Loglama 📝

Cron Jobs çalışırken arka planda görünmez bir kabukta (non-interactive shell) yürütülür. Bu yüzden cron yazarken 2 ALTIN KURAL vardır:

1. **Mutlak Yol (Absolute Path) Kullanın:** Komut ve dosya yollarını tam verin (`/usr/bin/bash /home/user/yedek.sh`).
2. **Çıktıları Log Dosyasına Yönlendirin:** Betiğin ne yaptığını veya hata verip vermediğini görmek için çıktıları loglayın.

### Yönlendirme Operatörleri:
• `>` : Dosyayı sıfırlar, üzerine yazar.
• `>>`: Dosyanın sonuna ekler (append).
• `2>&1`: Hata çıktılarını (stderr) standart çıktıya (stdout) yönlendirir.

Crontab Örnek Tanımı:
0 2 * * * /bin/bash /home/kullanici/scripts/yedek.sh >> /var/log/yedek.log 2>&1

---

⚙️ 4. Betikleri Arka Planda Çalıştırma (`&`, `nohup`) 🚀

Uzun süren bir betiği terminalde başlatıp terminali kapattığınızda işletim sistemi betiğe `SIGHUP` sinyali gönderir ve betik yarıda kesilir.

Betiğin terminal kapansa bile çalışmaya devam etmesi için 2 temel yöntem vardır:

### A. Ve (`&`) İşareti İle Arka Plana Atma:
Komutun sonuna `&` eklendiğinde arka planda çalışmaya başlar, ancak terminal kapanırsa durabilir.

./uzun_islem.sh &

### B. `nohup` (No Hangup) Kullanımı:
Terminal kapansa dahi betiğin kesintisiz çalışmasını sağlar. Çıktıları otomatik olarak `nohup.out` dosyasına yazar.

nohup ./uzun_islem.sh > islem.log 2>&1 &

---

📊 5. Uygulamalı Otomatik Yedekleme Betiği 💾

Gelelim öğrendiklerimizi birleştiren gerçek bir senaryoya! Her gün belirlenen dizini sıkıştırıp tarih etiketiyle yedekleyen ve eski yedekleri silen betik:

#!/bin/bash
set -euo pipefail

YEDEK_KAYNAK="/home/kullanici/projeler"
YEDEK_HEDEF="/var/backups"
TARIH=$(date +%Y-%m-%d_%H-%m-%S)
YEDEK_DOSYASI="$YEDEK_HEDEF/yedek_$TARIH.tar.gz"

# Hedef dizin yoksa oluştur
mkdir -p "$YEDEK_HEDEF"

echo "[$(date)] Yedekleme işlemi başladı..."

# Sıkıştırma İşlemi
tar -czf "$YEDEK_DOSYASI" "$YEDEK_KAYNAK"

echo "[$(date)] Yedekleme tamamlandı: $YEDEK_DOSYASI"

# 7 günden eski yedekleri otomatik temizle
find "$YEDEK_HEDEF" -type f -name "yedek_*.tar.gz" -mtime +7 -delete
echo "[$(date)] 7 günden eski yedekler temizlendi."

---

📝 Bölüm Özeti ve Gelecek Bölüm 🔮

Bu bölümde `crontab` sözdizimini, zamanlanmış görev tanımlamayı, `nohup` ile arka plan süreç yönetimini ve otomatik yedekleme/loglama mantığını öğrendik.

👉 Bölüm 10'da Bizi Ne Bekliyor? (FİNAL)
• Serinin Muhteşem Finali: **Uçtan Uca Modüler Sistem İzleme ve Raporlama Projesi** 🏆
• CPU, RAM, Disk ve Ağ Trafiğini Anlık İzleme
• HTML/Text Formatında Rapor Üretimi ve Otomatik E-Posta / Telegram Bildirimi
• Başta Sona B
ash Scripting Rehberi Özeti

Sorularınızı konu altından iletebilirsiniz. Serimizin FİNAL bölümünde görüşmek üzere! 🐚✨

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
135,067Konular
3,297,823Mesajlar
326,251Kullanıcılar
novelordSon Üye
Üst Alt