6 Commits

3 changed files with 29 additions and 8 deletions

View File

@ -5,6 +5,7 @@ import os
import re
import logging
import logging.handlers
import stat
import subprocess
import sys
@ -288,7 +289,8 @@ def weed_snapshots(fslist, snapshots, config, failed_snapshots):
def main():
config = configparser.ConfigParser()
config.read('/etc/zsnapper.ini')
config.read('/usr/local/etc/zsnapper.ini', '/etc/zsnapper.ini')
ret = RET_CODES['SUCCESS']
log = logging.getLogger(LOGGER)
@ -403,9 +405,22 @@ if __name__ == '__main__':
handler.setLevel(logging.WARNING)
log.addHandler(handler)
handler = logging.handlers.SysLogHandler(address='/dev/log')
handler = None
for logsocket in ('/var/run/log', '/dev/log'):
try:
mode = os.stat(logsocket).st_mode
except FileNotFoundError:
continue
if stat.S_ISSOCK(mode):
handler = logging.handlers.SysLogHandler(address=logsocket)
formatter = logging.Formatter(fmt='zsnapper[%(process)s] %(message)s')
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
log.addHandler(handler)
break
if not handler:
log.warning('No syslog socket found, will not log to syslog')
sys.exit(main())

View File

@ -6,7 +6,7 @@ try:
except ImportError:
from distutils import setup
version = '0.3'
version = '0.3.2'
setup(
name='zsnapper',

View File

@ -6,6 +6,7 @@ import sys
time_format='%Y-%m-%d_%H%M'
re_snapshot = re.compile(r'^(.*)@([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{4})$')
re_err_ok = re.compile(r"cannot create snapshot '[^']+': dataset already exists")
logger = 'zsnapper'
class ZFSSnapshotError(Exception):
@ -33,7 +34,12 @@ def do_zfs_command(args, zfs_cmd, pipecmd=None):
(out, err) = ctrl_proc.communicate()
if ctrl_proc.returncode != 0:
# check if we try to create a snapshot that already exists. This can happen
# if the script is run every minute and it takes more time than that to
# create all snapshots
if ctrl_proc.returncode == 1 and re_match(re_err_ok, err):
pass
elif ctrl_proc.returncode != 0:
raise ZFSSnapshotError('Failed to execute {}: {}'.format(cmd, err))
return out