beanbox |
11-18-2009 08:43 AM |
python rsync script runs from shell not from cron
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
|