Bash scriptlerinde eş zamanlı veya ardışık job yönetimi, zaman zaman karmaşık hale gelebilir. Bu noktada, queue mantığıyla çalışan bir yapı kurmak, işlemlerin sırayla ve kontrollü şekilde yürütülmesini sağlar. Böyle bir yapı, özellikle büyük veri işlemlerinde veya ağ çağrılarında, kaynakların verimli kullanılmasını sağlar.
Queue mantığını Bash'ta temel olarak dizi veya dosya tabanlı bir yapı ile uygulayabiliriz. En yaygın yöntemlerden biri, belirli bir dizin veya dosya kullanarak "iş listesi" oluşturmak ve bu liste üzerinden işlemleri sırasıyla yürütmektir. Her job, bir dosya veya satır olarak temsil edilir. Script, bu job'ları okur, işler ve tamamlandığında siler veya başka bir klasöre taşır.
Örneğin, aşağıdaki gibi bir dizin yapısı kurabiliriz:
123456
jobs/
job1.txt
job2.txt
...
done/
İşleme scripti ise şu mantıkla çalışır:
jobs klasöründeki ilk job'ı alır, işler, tamamladıktan sonra
done klasörüne taşır. Bu sayede, işlemler sırayla ve kolaylıkla takip edilir.
Bash'ta bu mantığı aşağıdaki gibi kodlayabilirsiniz:
12345678910111213141516171819202122232425262728
#!/bin/bash
JOB_DIR="./jobs"
DONE_DIR="./done"
mkdir -p "$JOB_DIR" "$DONE_DIR"
while true; do
# İlk job'u seç
job=$(ls "$JOB_DIR" | head -n 1)
if [ -z "$job" ]; then
echo "Tüm işler tamamlandı."
break
fi
echo "İşleniyor: $job"
# İşlemi burada tanımla, örneğin:
cat "$JOB_DIR/$job" | while read line; do
echo "İşleniyor: $line"
# İşlem kodları
done
# Job tamamlandıktan sonra taşımak
mv "$JOB_DIR/$job" "$DONE_DIR/$job"
echo "$job tamamlandı."
sleep 1 # kaynak kullanımını azaltmak için
done
Bu yapı, scriptin sürekli olarak yeni job'lar olup olmadığını kontrol etmesini sağlar. Ayrıca, hata durumlarında tekrar deneme veya belirli bir fail sayısına ulaşınca raporlama gibi ek özellikler de eklenebilir.
Kullanımda dikkat edilmesi gereken noktalar:
- İşlem sırasında oluşabilecek hataları yakalamak ve uygun şekilde yönetmek
- Çoklu script veya process'in aynı job dizisine erişmesini önlemek (mutex veya kilit mekanizması)
- Job'ların bağımsız ve tekrar edilebilir olması
Bu temel yapı, Bash ile basit ama etkili bir queue mantığı kurmanıza olanak tanır. Sizce bu yapıya eklenebilecek en faydalı geliştirmeler veya karşılaştığınız sorunlar nelerdir?