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