-
Sadrazamv4
instagram:sadrazam.spy Tg:Sadrazamv4
🚀 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! 🐚✨
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