projects
/
sitarba.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5f6d53f
)
Using select.select on tarp's output
author
Stefan Huber <shuber2@gmx.at>
Tue, 15 May 2012 10:04:13 +0000
(12:04 +0200)
committer
Stefan Huber <shuber2@gmx.at>
Tue, 15 May 2012 10:04:13 +0000
(12:04 +0200)
shbackup
patch
|
blob
|
history
shbackup.conf
patch
|
blob
|
history
diff --git
a/shbackup
b/shbackup
index d5b8b812073f75208576f3b80e2465d0d3757ff1..977fb5cd35403ccdf4fc41cc172369fa598d0b2d 100755
(executable)
--- a/
shbackup
+++ b/
shbackup
@@
-8,7
+8,7
@@
import datetime
import os, shutil, sys
import configparser
import hashlib
import os, shutil, sys
import configparser
import hashlib
-import subprocess, fcntl
+import subprocess, fcntl
, select
import random, re
import logging
import random, re
import logging
@@
-261,16
+261,21
@@
class BackupManager:
tarpath = "/bin/tar"
fsfn = os.path.join(targetdir, fileset.name) + "." + self.conf.format
tarpath = "/bin/tar"
fsfn = os.path.join(targetdir, fileset.name) + "." + self.conf.format
- taropts = [
"-cpva"
]
+ taropts = []
+ # Add the since date, if given
if since != None:
taropts += ["-N", since.strftime("%Y-%m-%d %H:%M:%S")]
if since != None:
taropts += ["-N", since.strftime("%Y-%m-%d %H:%M:%S")]
+ # Add the exclude patterns
for pat in self.conf.exclpatterns:
taropts += ["--exclude", pat]
for pat in self.conf.exclpatterns:
taropts += ["--exclude", pat]
+ # Adding directories to backup
+ taropts += ["-C", "/"] + [ "./" + d.lstrip("/") for d in fileset.dirs]
+
# Launch the tar process
# Launch the tar process
- tarargs = [tarpath] +
taropts + ["-f", fsfn] + fileset.dir
s
+ tarargs = [tarpath] +
["-cpvaf", fsfn] + taropt
s
logfile.debug("tar call: " + " ".join(tarargs))
tarp = subprocess.Popen( tarargs, bufsize=-1, \
stdout=subprocess.PIPE, stderr=subprocess.PIPE )
logfile.debug("tar call: " + " ".join(tarargs))
tarp = subprocess.Popen( tarargs, bufsize=-1, \
stdout=subprocess.PIPE, stderr=subprocess.PIPE )
@@
-293,10
+298,15
@@
class BackupManager:
# Read stdout and stderr of tarp
errmsg = b""
while tarp.poll() == None:
# Read stdout and stderr of tarp
errmsg = b""
while tarp.poll() == None:
- l = readlineNonBlocking(tarp.stdout)
- if l != b"":
- logging.debug(l[:-1].decode())
- errmsg += readlineNonBlocking(tarp.stderr)
+ rd,wr,ex = select.select([tarp.stdout, tarp.stderr], [], [], 0.05)
+
+ if tarp.stdout in rd:
+ l = readlineNonBlocking(tarp.stdout)
+ if l != b"":
+ logging.debug(l[:-1].decode())
+
+ if tarp.stderr in rd:
+ errmsg += readlineNonBlocking(tarp.stderr)
# Get the remainging output of tarp
# Get the remainging output of tarp
@@
-307,8
+317,8
@@
class BackupManager:
# Get return code of tarp
rett = tarp.wait()
if rett != 0:
# Get return code of tarp
rett = tarp.wait()
if rett != 0:
- for l in errmsg.split("\n"):
- logfile.error(
l.decode().strip().rstrip()
)
+ for l in errmsg.
decode().
split("\n"):
+ logfile.error(
l
)
logfile.error(tarpath + " returned with exit status " + str(rett) + ".")
logfile.error(tarpath + " returned with exit status " + str(rett) + ".")
diff --git
a/shbackup.conf
b/shbackup.conf
index fb293cfa33806106a49fe0e8efc9fd50fcbed707..287a02ed60fa999c9fd64281ffaa05a3909abe87 100644
(file)
--- a/
shbackup.conf
+++ b/
shbackup.conf
@@
-1,6
+1,6
@@
[destination]
# Where shbackup stores the backups and other stuff
[destination]
# Where shbackup stores the backups and other stuff
-directory =
.
/backup
+directory =
/media
/backup
# Which format should be used by tar?
# One of tar, tar.gz, tar.bz2, tar.xz
format = tar.gz
# Which format should be used by tar?
# One of tar, tar.gz, tar.bz2, tar.xz
format = tar.gz
@@
-8,8
+8,9
@@
format = tar.gz
[history]
# keepEPOCH contains the number of backups that are kept for that particular
[history]
# keepEPOCH contains the number of backups that are kept for that particular
-# epoch, where EPOCH can be year, month, week, day, or hour. modeEPOCH defines
-# the backup mode for that particular epoch. Mode can be full, diff or incr.
+# epoch, where EPOCH can be year, month, week, day, or hour. If the number is 0
+# then no backup iscreated for that epoch. modeEPOCH defines the backup mode
+# for that particular epoch. Mode can be full, diff or incr.
keephour = 1
keepday = 14
keepweek = 2
keephour = 1
keepday = 14
keepweek = 2
@@
-23,17
+24,20
@@
modeyear = full
[input]
[input]
-# exclude* contains --exclude patterns for tar. Files matching the pattern are
-# not included into the backup.
+# Each option starting with "exclude" contains a single --exclude pattern for
+# tar. Files matching the pattern are not included into the backup. Tar is
+# invoked with "-C /" and, thus, exclude patterns refering to absolute paths
+# need to start with "./" instead of "/".
exclude1 = */tmp/*
exclude2 = */[Cc]cache/*
exclude3 = */log*
exclude1 = */tmp/*
exclude2 = */[Cc]cache/*
exclude3 = */log*
-exclude5 = /home/*/.wine/*
-exclude7 = /lib/layman/*
+exclude5 =
.
/home/*/.wine/*
+exclude7 =
.
/lib/layman/*
# A file set called 'home'. Each file set is packed into one archive using tar.
[set home]
# A file set called 'home'. Each file set is packed into one archive using tar.
[set home]
-# dir* is one directory which belongs to this file set.
+# Each option starting with "dir" contains a single directory which belongs to
+# this file set.
dir1 = /home/username/
dir2 = /media/books/
dir1 = /home/username/
dir2 = /media/books/