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 izlemekrequests– 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
~/Downloadsklasö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-sendsadece GUI oturumu açıkken çalışır. SSH üzerinden çalıştırmak istersenizpushbulletgibi 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/logaltındaki.logdosyalarını tar.gz formatına sıkıştır. - Sıkıştırılmış arşivi
/backup/logsklasö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
- En Az Yetki Prensibi – Scriptleri mümkün olduğunca normal kullanıcı hesabı altında çalıştırın.
sudoyalnızca gerekli dosya taşıma işlemlerinde kullanılmalı. - Ortam Değişkenleri – API anahtarları ve şifreler kod içinde düz metin olarak bulunmamalıdır.
~/.bash_profileya dasystemdbirimindekiEnvironment=satırları tercih edilmelidir. - Versiyon Kontrol – Otomasyon scriptlerini bir Git deposunda tutun. Değişiklik geçmişi, geri dönüş ve ortak çalışma için kritiktir.
- Yedekleme – Özellikle
log_archive.shgibi veri taşıyan scriptlerin hedef klasörleri için ayrı bir yedekleme stratejisi (ör.rcloneile bulut) ekleyin. - 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.