I am running Ubuntu 9.10 w/ system stats:
Mobo: M4178 Plus
BIOS: vendor: American Megatrends Inc.
version: 1101 (06/06/2009)
size: 64KiB
capacity: 960KiB
CPU: AMD Athlon II X2 240
MEM: 4Gigs (2 DDR2 2Gig sticks)
I have written a Python script to backup selected files and directories in my home folder.
I am posting my devel files for help.
backuptest.py
PHP Code:
#!/usr/bin/python
"""Python Rsync backup
This program will creat a set of directories on the chosen backup distenation media, and create
incremental backups at runtime. Those files that have been either deleted or moved since the
last backup will be placed in an increments directory under a folder labeled with the backup run time
(Day Month Date mil-time year). All backup logging will be stored in a log file "rsync-backup.log" on
the backup media.
"""
__author__ = "Ryan Box (coffebean@sbcglobal.net)"
__version__ = "$Revision: 0.6 $"
__date__ = "$Date: 11/17/09 17:19 $"
__license__ = "Python"
import os
import restformat
from configobj import ConfigObj
from time import asctime
##TO-DO remove test from all rsync-backuptest.log
#-----------------------------Variables----------------------------------------------
config = ConfigObj('config.ini')
backupruntime = asctime()
backupmedia = config['media']
sourcedir = config['source']
backupdir = backupmedia + config['backupdir']
incrementsdir = backupmedia + config['incsdir']
exclude = sourcedir + config['exlist']
include = sourcedir + config['inlist']
log = backupmedia + config['logfile']
backupincdir = incrementsdir + backupruntime
#-------------------First run directory creation--------------------------------------
if not os.path.exists(backupdir):
print 'The backup directory dose not exist. Creating now.'
os.mkdir(backupdir)
if not os.path.exists(incrementsdir):
print 'The increments directory dose not exist. Creating now.'
os.mkdir(incrementsdir)
#Logging
backuplog = open(log, 'a')
print >> backuplog, (restformat.title(backupruntime))
print >> backuplog, ('Making increments directory: "'+ incrementsdir + backupruntime +'"\n')
#Make incrementsdir
backupincdir = incrementsdir + backupruntime
os.mkdir(backupincdir)
#Logging
print >> backuplog, (restformat.subtitle('BEGIN BACKUP'))
backuplog.close()
#Run rsync backup command with Linux logging
#TO-DO remove n from -narEtb prior to release
os.system('rsync -narEtb --delete --stats --log-file-format="%i %o %f %n" --files-from='+include+' --backup-dir='+'"'+backupincdir+'" '+sourcedir+' '+backupdir+'>>'+log)
backupincdir = incrementsdir + backupruntime
if os.listdir(backupincdir) == []:
backuplog = open(log, 'a')
print >> backuplog, ('\n')
print >> backuplog, ('Nothing sent to'+' ''('+incrementsdir+backupruntime+')'' '+'new increments directory.')
print >> backuplog, ('Deleting Empty Directory.')
print >> backuplog, ('\n')
os.rmdir(incrementsdir + backupruntime)
else:
backuplog = open(log, 'a')
print >> backuplog, ('\n')
print >> backuplog, ('Files sent to'' '+backupincdir+':')
for top, dirs, files in os.walk(backupincdir):
for nm in files:
print >> backuplog, (os.path.join(top, nm))
print >> backuplog, ('\n')
#Logging
backuplog = open(log, 'a')
print >> backuplog, (restformat.subtitle('END BACKUP'))
print >> backuplog, ('\n\n')
backuplog.close()
This file does the brunt of the work and runs.
The Variables are loaded from the config.ini file. This is where the cron (gnome-scheduler) job pukes.
config.ini
PHP Code:
media = /media/FreeAgent/ #The distination drive for you Backup
backupdir = backuptest/ #The directory to backup into
incsdir = backup-testincrements/ #The directory to place files deleted or moved since last backup
source = /home/coffeeboy/ #The source directory to be backedup
logfile = rsync-backuptest.log #Name of the log file
exlist = bin/backup_devel/conf/backupexluded.txt #The location of the excluded list
inlist = bin/backup_devel/conf/backupincluded.txt #The location of the included list
The resformat file does some minor formating for the log file (not posting the code).
When I run this program from the shell it runs correctly, but when I run the "gnome-scheduler" job I get this error out put:
Code:
Traceback (most recent call last):
File "/home/coffeeboy/bin/backup_devel/src/backuptest.py", line 28, in <module>
backupmedia = config['media']
File "/usr/lib/pymodules/python2.6/configobj.py", line 580, in __getitem__
val = dict.__getitem__(self, key)
KeyError: 'media'
Press ENTER to continue and close this window.
This occurs when I have
python ~/bin/backup_devel/src/backuptest.py or
~/bin/backup_devel/src/backuptest.py in the 'Command' line of t the scheduled task.
Any help would be great. I have a running version of this code but this is the next rev. that I have worked up (having fun learning new things)
Thank you