python實戰系列之按期備份配置文件(五)

  1. 背景需求python

    辦公區使用了dhcp用於動態分配ip地址,解決了辦公用戶,移動用戶(wifi)地址分配問題,因有配置的變動,爲保障配置文件正確,防止出故障時實現快速恢復,特編寫了一個備份文件的python腳本。備份的方式是:本地保留一個月的數據,並將備份文件上傳至另一臺機器,以達到容災的目的,程序經過crontab天天按期執行一次便可。shell


  2. 程序內容
    數據庫

cat /usr/local/sbin/backup_dhcp.py  
#!/usr/bin/python
#_*_ coding:utf8 _*_
#author:Happy
#目的:備份dhcp的配置文件/etc/dhcp/dhcpd.conf
#來自Happy實驗室,快樂學習,一塊兒進步

import os
import sys
import time
import os.path
import shutil

class Backup(object):
        '''
        用於備份dhcp的配置文件
        '''
        dhcp_conf = "/etc/dhcp/dhcpd.conf"
        backup_dir = "/etc/dhcp/backup"
        date = time.strftime('%Y-%m-%d',time.localtime())
        
        def check_path(self):
                '''
                檢查dhcp配置文件和備份路徑
                '''
                if not os.path.exists(self.dhcp_conf):
                        print "dhcpd configuration %s is not exsits" % (self.dhcp_conf)
                        return False 
                if not os.path.isdir(self.backup_dir):
                        os.makedirs(self.backup_dir)
                return True
                
        def get_backup_filename(self):
                '''
                獲得dhcp的備份名字,相似於:/etc/dhcp/backup/dhcpd-2016-01-01的格式
                '''
                if self.check_path():
                        conf =  os.path.split(self.dhcp_conf)[-1]
                        backup_filename = os.path.join(self.backup_dir,"%s_%s" % (conf,self.date))
                        shutil.copyfile(self.dhcp_conf,backup_filename)
                return backup_filename
                
        def upload_backup_filename(self):
                '''
                將備份文件上傳至遠程的服務器,此處經過rsync的方式實現,提早配置好rsync服務
                '''
                cmd = "rsync -av %s rsync://root@10.16.2.8/upload/dhcp_bak"  % (self.get_backup_filename())
                return os.system(cmd)
        def delete_exipre_filename(self):
                '''
                刪除過時的文件,保留週期爲一個月,此處直接調用shell中的find實現
                '''
                cmd = 'find %s -type f -a -ctime +31 -a -name "dhcpd.conf*" | xargs rm -f {}'  % (self.backup_dir)
                return os.system(cmd)
                
if __name__ == "__main__":
        bak = Backup()
        bak.upload_backup_filename() 
        bak.delete_exipre_filename()

3. 按期執行
服務器

    經過週期性計劃任務crontab實現週期性自動執行,備份按照性質不一樣能夠設置不一樣的備份策略,如每小時備份,天天備份,每週備份,或者每月備份,按照不一樣的狀況,採起不一樣的備份週期,編寫crontab實現便可,以下天天備份爲例:
app

chmod u+x /usr/local/sbin/backup_dhcp.py 
[root@KUGOU_DHCP_GZYC backup]# crontab -e
01      01      *       *       *       ( python /usr/local/sbin/backup_dhcp.py )


4. 總結運維

   備份是平常運維中工做的重要組成部分,如數據庫的備份,配置文件的備份,歸檔數據的備份等等,經過備份策略,能夠在數據有故障時,採起快速的回滾,還原,必定程度減小數據的丟失,保障應用程序正常運行。上述的例子經過備份單個文件實現數據的備份,能夠改造爲一個通用的備份,如備份的文件路徑,備份存儲路徑,遠程保存的地址等。ide


5. time模塊的學習學習

python中經過time模塊,實現時間相關的處理,以下總結了time經常使用的方法.
crontab

  1. 獲取當前時間的時間戳ip

>>> import time
>>> time.time()
1452581489.4855039

2. 獲取當前日期

>>> time.ctime()
'Tue Jan 12 14:52:29 2016'

3. 獲取時間的八元組

>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=1, tm_mday=12, tm_hour=14, tm_min=53, tm_sec=11, tm_wday=1, tm_yday=12, tm_isdst=0)

4. 將時間戳轉換爲日期格式

>>> time.strftime("%Y-%m-%d",time.localtime(time.time()))
'2016-01-12'
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
'2016-01-12 14:55:13'

5. 將時間日期轉換爲八元組

>>> time.strptime("2011-09-28 10:00:00","%Y-%m-%d %H:%M:%S") 
time.struct_time(tm_year=2011, tm_mon=9, tm_mday=28, tm_hour=10, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=271, tm_isdst=-1)

6. 將時間日期轉換爲時間戳

>>> time.mktime(time.strptime("2011-09-28 10:00:00","%Y-%m-%d %H:%M:%S"))
1317175200.0
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(1317175200.0))
'2011-09-28 10:00:00'
相關文章
相關標籤/搜索