Skip to content
Bloga dön
Yaşam kişisel otomasyon python bash cron görev otomasyonu linux Groq

Python ve Bash ile Günlük İşlerin Otomatikleştirilmesi: Kişisel Otomasyon Rehberi

Kişisel yaşam ve iş akışlarınızı basitleştirmek için Python ve Bash scriptleriyle dosya yönetimi, bildirim gönderme ve zamanlanmış görevlerin nasıl otomatikleştirileceğini adım adım öğrenin.

Caner Serbest

Sistem ve Altyapı

5 dk okuma

Python ve Bash ile Günlük İşlerin Otomatikleştirilmesi: Kişisel Otomasyon Rehberi

Yazar: Caner Serbest


Giriş

Günlük yaşamda tekrar eden küçük görevler, zaman kaybına ve zihinsel yorgunluğa neden olur. Kişisel otomasyon, bu tekrarlayan işleri programlama dili ve kabuk scriptleriyle otomatikleştirerek verimliliği artırır. Bu rehberde, Python ve Bash kullanarak üç temel senaryoyu (dosya yönetimi, anlık bildirim, zamanlanmış görev) nasıl otomatize edebileceğinizi anlatacağız.

Not: Tüm örnekler Ubuntu 22.04 LTS ve Python 3.11 üzerinde test edilmiştir, ancak diğer Linux dağıtımları ve macOS ortamları için de aynı prensipler geçerlidir.


1. Çalışma Ortamının Hazırlanması

1.1 Python ve Pip’in Kurulumu

sudo apt update && sudo apt install -y python3 python3-pip
python3 --version   # 3.11.x
pip3 --version

1.2 Gerekli Python Paketleri

Kişisel otomasyon senaryoları için aşağıdaki paketleri kuracağız:

  • watchdog – Dosya sistemi değişikliklerini izlemek
  • requests – HTTP istekleri (örnek: webhook bildirimleri)
  • schedule – Basit zamanlama
pip3 install watchdog requests schedule

1.3 Bash ve Cron’un Temel Kullanımı

Bash scriptleri Linux kabuğunun en yaygın otomasyon aracıdır. Zamanlanmış görevleri yönetmek için cron kullanacağız. Cron dosyasını düzenlemek için:

crontab -e

2. Senaryo 1 – İndirilen Dosyaları Otomatik Klasörleme

2.1 Problem Tanımı

İnternetten sık sık PDF, resim ve arşiv dosyaları indiriyorsunuz. Bu dosyalar genellikle ~/Downloads klasöründe birikir ve manuel olarak taşımak zaman alır.

2.2 Çözüm Yaklaşımı

  • watchdog ile ~/Downloads klasörünü izleyin.
  • Yeni bir dosya eklendiğinde dosya uzantısına göre hedef klasöre taşıyın.

2.3 Python Scripti

import os
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

DOWNLOAD_DIR = os.path.expanduser('~/Downloads')
TARGETS = {
    '.pdf': os.path.expanduser('~/Documents/ PDFs'),
    '.jpg': os.path.expanduser('~/Pictures'),
    '.png': os.path.expanduser('~/Pictures'),
    '.zip': os.path.expanduser('~/Archives'),
    '.tar': os.path.expanduser('~/Archives'),
    '.gz': os.path.expanduser('~/Archives'),
}

class MoveHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            return
        src_path = event.src_path
        _, ext = os.path.splitext(src_path)
        ext = ext.lower()
        if ext in TARGETS:
            dest_dir = TARGETS[ext]
            os.makedirs(dest_dir, exist_ok=True)
            dest_path = os.path.join(dest_dir, os.path.basename(src_path))
            try:
                shutil.move(src_path, dest_path)
                print(f"Moved {src_path} → {dest_path}")
            except Exception as e:
                print(f"Error moving file: {e}")

if __name__ == "__main__":
    observer = Observer()
    observer.schedule(MoveHandler(), DOWNLOAD_DIR, recursive=False)
    observer.start()
    print(f"Watching {DOWNLOAD_DIR} for new files …")
    try:
        while True:
            pass
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

2.4 Scripti Servis Olarak Çalıştırma

# /etc/systemd/system/download-watcher.service
[Unit]
Description=Download klasörünü otomatik klasörleme servisi
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/$(whoami)/scripts/download_watcher.py
Restart=on-failure
User=$(whoami)
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now download-watcher.service

3. Senaryo 2 – Günlük Hava Durumu Bildirimi

3.1 Problem Tanımı

Sabah işe başlarken hava durumunu kontrol etmek için birkaç web sitesine göz atıyorsunuz. Bu adımı otomatikleştirip bir bildirim alarak zaman kazanabilirsiniz.

3.2 Çözüm Yaklaşımı

  • OpenWeatherMap API’si üzerinden anlık hava durumu alın.
  • notify-send (Linux masaüstü bildirimleri) ile ekranınıza mesaj gönder.
  • cron ile her gün 07:30’da çalıştır.

3.3 Python Scripti

import os
import requests
import subprocess

API_KEY = os.getenv('OWM_API_KEY')  # OpenWeatherMap API anahtarını ortam değişkeni olarak ayarlayın
CITY_ID = '3247440'  # İstanbul (örnek)
URL = f"https://api.openweathermap.org/data/2.5/weather?id={CITY_ID}&appid={API_KEY}&units=metric&lang=tr"

def fetch_weather():
    resp = requests.get(URL, timeout=10)
    resp.raise_for_status()
    data = resp.json()
    temp = data['main']['temp']
    desc = data['weather'][0]['description'].capitalize()
    return f"{temp}°C – {desc}"

def send_notification(message):
    subprocess.run([
        'notify-send',
        '-u', 'normal',
        '-t', '10000',
        'Günaydın! Hava Durumu',
        message
    ])

if __name__ == '__main__':
    try:
        weather = fetch_weather()
        send_notification(weather)
    except Exception as e:
        send_notification(f"Hava durumu alınamadı: {e}")

3.4 Çevresel Değişken ve Cron Ayarı

# .bashrc veya .profile dosyasına ekleyin
export OWM_API_KEY="YOUR_OPENWEATHERMAP_API_KEY"
# Cron girdisi (crontab -e)
30 7 * * * /usr/bin/python3 /home/$(whoami)/scripts/weather_notify.py

İpucu: notify-send sadece GUI oturumu açıkken çalışır. SSH üzerinden çalıştırmak isterseniz mail ya da pushbullet gibi dış bildirim servislerini tercih edin.


4. Senaryo 3 – Haftalık Log Arşivleme ve Sıkıştırma

4.1 Problem Tanımı

Linux sunucularda /var/log altında biriken log dosyaları zamanla büyür ve disk doluluğuna yol açar. Haftalık bir arşivleme işlemiyle eski logları sıkıştırıp saklamak iyi bir pratiktir.

4.2 Çözüm Yaklaşımı

  • Bash scriptiyle /var/log altındaki .log dosyalarını tar.gz formatına sıkıştır.
  • Sıkıştırılmış arşivi /backup/logs klasörüne taşı.
  • Eski arşivleri 30 gün tutup daha eski olanları sil.

4.3 Bash Scripti

#!/usr/bin/env bash

# log_archive.sh – Haftalık log arşivleme scripti
set -euo pipefail

SRC_DIR="/var/log"
DEST_DIR="/backup/logs"
TIMESTAMP=$(date +"%Y-%m-%d")
ARCHIVE_NAME="logs-${TIMESTAMP}.tar.gz"

mkdir -p "${DEST_DIR}"

# Tüm .log uzantılı dosyaları sıkıştır
sudo tar -czf "${DEST_DIR}/${ARCHIVE_NAME}" -C "${SRC_DIR}" *.log

echo "Log arşivi oluşturuldu: ${DEST_DIR}/${ARCHIVE_NAME}"

# 30 günden eski arşivleri sil
find "${DEST_DIR}" -type f -name "logs-*.tar.gz" -mtime +30 -exec rm -f {} \;

echo "30 günden eski arşivler temizlendi."
# Scripti çalıştırılabilir yapın
chmod +x ~/scripts/log_archive.sh

4.4 Cron İle Haftalık Çalıştırma

# crontab -e
# Her Pazar 03:15'te çalıştır
15 3 * * 0 /home/$(whoami)/scripts/log_archive.sh >> /var/log/log_archive.log 2>&1

5. Otomasyonları Yönetmek ve İzlemek

5.1 Systemd Journal

Python tabanlı servisleri (download-watcher.service) systemd üzerinden yönetmek, logları journalctl -u download-watcher.service ile incelemek, hataları hızlı yakalamamızı sağlar.

5.2 Cron Logları

Cron görevlerinin çıktısı /var/log/syslog veya /var/log/cron.log içinde bulunur. Sorun yaşandığında:

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

5.3 Basit İzleme Dashboard’u

htop, glances veya monitorix gibi araçlar CPU, bellek ve I/O kullanımını gerçek zamanlı gösterir. Otomasyon scriptlerinin sistem kaynaklarını ne kadar tükettiğini buradan takip edebilirsiniz.


6. Güvenlik ve En İyi Pratikler

  1. En Az Yetki Prensibi – Scriptleri mümkün olduğunca normal kullanıcı hesabı altında çalıştırın. sudo yalnızca gerekli dosya taşıma işlemlerinde kullanılmalı.
  2. Ortam Değişkenleri – API anahtarları ve şifreler kod içinde düz metin olarak bulunmamalıdır. ~/.bash_profile ya da systemd birimindeki Environment= satırları tercih edilmelidir.
  3. Versiyon Kontrol – Otomasyon scriptlerini bir Git deposunda tutun. Değişiklik geçmişi, geri dönüş ve ortak çalışma için kritiktir.
  4. Yedekleme – Özellikle log_archive.sh gibi veri taşıyan scriptlerin hedef klasörleri için ayrı bir yedekleme stratejisi (ör. rclone ile bulut) ekleyin.
  5. Test Ortamı – Prodüksiyon ortamına geçmeden önce bir VM ya da Docker konteyneri içinde test edin.

7. Sonuç

Kişisel otomasyon, sadece iş akışını hızlandırmakla kalmaz, aynı zamanda tekrarlayan görevleri zihinsel olarak azaltarak daha yaratıcı işlere odaklanmanıza imkan tanır. Bu rehberde Python’un watchdog, requests ve schedule kütüphaneleri, Bash’in güçlü dosya işleme yetenekleri ve cron/systemd entegrasyonu bir araya getirildi. Örnek senaryoları kendi ihtiyaçlarınıza göre genişletebilir, yeni scriptler ekleyebilir ve tamamen kendi otomasyon ekosisteminizi oluşturabilirsiniz.

Unutmayın: Otomasyon bir kez kurulur ve bir daha düşünülmez diye bir şey yok. Çevresel değişiklikler, yeni gereksinimler ve güvenlik güncellemeleri sürekli bakım gerektirir. Bu bakım sürecini de bir otomasyon adımı haline getirerek “otomasyon içinde otomasyon” yaklaşımını benimseyebilirsiniz.

Keyifli otomasyonlar!


Bu yazı Groq ile otomatik oluşturulmuştur.