Python Scripti İle Backup Tarihi Kontrolü

Sunucu yedeklerinin locale alınması gerektiği ve uzun süre takip edilemedi durumlarda, gereksiz disk kullanımının önüne geçmek ve ek önlem olarak backupların sunucunun localinin dışarısında başka bir yerde de tutmak ( sunucunun çökmesine, disklerin erişilemeyecek şekilde sorun olması durumuna karşın ) için, belli bir günden sonra birikmiş backupları belirlediğim mail adresine mail göndererek, backupları başka bir alana indirmem gerektiğini hatırlatan bir script yazmak istedim.

Script kısaca belirlediğiniz dizindeki dosyaların oluşturulma tarihleri ve bugünün tarihine bakıp, aradan 7 gün geçmiş ise scriptte belirtilen mail adresine bilgilendirme maili gönderiyor.

#!/usr/bin/env python
#-*- coding: UTF-8 -*-

import time
import os
import datetime
import smtplib

#sendemail fonksiyonunda smtpserver kısmına
# mail sunucusunun stmp bilgilerini girmeniz gerekiyor

def sendemail(from_addr, to_addr_list,
              subject, message,
              login, password,
              smtpserver='mail.domain.com:587'):
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Subject: %s\n\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()

#yedeklerin tutulduğu dizin
dir = "/home/yedek/"
# dizinde bulunan dosyaları listeliyoruz.
list = os.listdir(dir)

for i in list:
	# dosyaları tam yolları ile döngüye sokuyoruz
	fl = os.path.join(dir,i)
	# dosyaların olusturulma tarihini alıyoruz
	timestamp = time.ctime(os.path.getctime(fl))
	# sadece gununu belirleyebilmek için tuple formatına çeviriyoruz
    file_day  = time.strptime(timestamp)
	#sadece dosyanın gününü degiskene atıyoruz.        
    c_day = file_day.tm_mday

	#bugunun tarihini belirliyoruz
    date_today = datetime.date.today()
	#bugunun tarihinden sadece ayın kaçı olduğunu belirliyoruz	
    d_today = date_today.strftime("%d")	
	# dosya tarihi ile bugunun tarihini int e cevirip, farkını buluyoruz	
    hafta = int(d_today) - int(c_day)
	# eger dosya 7 gun once olusturulmuşsa sendemail fonksiyonuna 
        #git yoksa script sonlanacak		
	if hafta > 7:				
		continue
	else:
		quit()
# eger 7 günden fazla olmuş ise maili gönder
sendemail(from_addr = 'mailin gönderileceği adres', 
	to_addr_list = ['mailin alıcısı'], 
	subject      = 'Mail Başlığı', 
	message      = 'Mail içeriği', 
	login        = 'mailin gönderileceği adres', 
	password     = 'mail şifresi')

Bu scripti py uzantılı bir dosyaya kaydederek, cron aracılığı ile her gün çalıştırıp düzenli olarak yedek dizinini kontrol etmesini sağlayabilirsiniz.

Güncelleme(29.07.2013): Özgür Savaşan Bey’in önerisi üzerine for döngüsünde timedelta kullanarak yazılmış hali,

for i in list: fl = os.path.join(dir,i) timestamp = os.path.getctime(fl) createdate = datetime.date.fromtimestamp(timestamp) today = datetime.date.today() today_before = today - datetime.timedelta(days = 7) if createdate == today_before: continue else: quit()

Kaynaklar: