浏览代码

added first python script version

Tobias Simetsreiter 5 年之前
父节点
当前提交
a8e1ef9308
共有 1 个文件被更改,包括 150 次插入0 次删除
  1. 150 0
      pyBackup.py

+ 150 - 0
pyBackup.py

@@ -0,0 +1,150 @@
+#!/usr/bin/env python3
+# Backup Python Script
+# Version: 0.0.1.0
+# Maintainer: Tobias Simetsreiter <tobias@tsimnet.eu>
+
+import sys
+import os
+
+def main():
+    args = _parser()
+    if "func" in args:
+        return args.func()
+
+def _parser():
+    import argparse as ap
+    parser = ap.ArgumentParser()
+    parser.set_defaults(func=parser.print_help)
+    subp = parser.add_subparsers()
+    subp_sc = subp.add_parser("shellscript")
+    subp_sc.set_defaults(func=_shellscript_command)
+    subp_sc = subp.add_parser("cronjob")
+    subp_sc.set_defaults(func=lambda:print(Cronjob(command="asdf")))
+    return parser.parse_args()
+
+def _shellscript_command(args):
+    return bash(SHELLSCRIPT).returncode
+
+def bash(script="", args=[], encoding="utf-8"):
+    import subprocess as sub
+    proc = sub.Popen(["bash"], stdin=sub.PIPE)
+    proc.stdin.write(script.encode(encoding))
+    proc.stdin.flush()
+    proc.wait()
+    return proc
+
+def tarxz():
+    pass
+
+class Cronjob:
+    _minute = "*"
+    _hour = "*"
+    _day_of_month = "*"
+    _month = "*"
+    _day_of_week = "*"
+    _user = "root"
+    _command = ""
+
+    def __init__(self, *args, **kwargs):
+        for key,value in kwargs.items():
+            getattr(self,"_"+key)
+            setattr(self,"_"+key,value)
+
+    def __str__(self):
+        CRON_TEMPLATE = '{self.minute} {self.hour} {self.day_of_month} {self.month} {self.day_of_week} {self.user} {self.command}'
+        return CRON_TEMPLATE.format(self=self)
+        
+crontab_defaults={
+    "minute":"*",
+    "hour":"*",
+    "day_of_month": "*",
+    "month": "*",
+    "day_of_week": "*",
+    "user": "root",
+    "command": "",
+}
+
+def crontab(name=__file__, args={}):
+    format_args = crontab_defaults.copy()
+    format_args.update(args)
+
+SHELLSCRIPT = '''#!/usr/bin/env bash
+
+main(){
+    trap 'errhandler $LINENO' ERR
+    BACKUPDIR="/mnt/backup"
+    MAILRCP=""
+    checkmount "$BACKUPDIR"
+    tarxz root/scripts/ "$BACKUPDIR/root-scripts.tar.xz"
+    tarxz etc/apache2/ "$BACKUPDIR/apache-config.tar.xz"
+    tarxz etc/postfix/ "$BACKUPDIR/etc-postfix.tar.xz"
+    tarxz var/www/html/ "$BACKUPDIR/adms-html.tar.xz"
+}
+
+
+setup(){
+while getopts "h?vf:" opt; do
+    case "$opt" in
+    h|\?)
+        show_help
+        exit 0
+        ;;
+    v)  verbose=1
+		set -x 
+        ;;
+    f)  output_file=$OPTARG
+        ;;
+    esac
+done
+
+if [ -t 1 ]
+then 
+    export TTY=/dev/tty
+else
+    export TTY=/dev/null
+fi
+
+set -o history
+shopt -s lastpipe
+
+export LOG=""
+
+}
+
+errhandler(){
+    local RETURNCODE="$?"
+    local LAST_CMD=$(echo `history |tail -n3 |head -n1` | sed 's/[0-9]* //')
+    printf "Error on line: $1,RETURNCODE: $RETURNCODE, CMD: [$LAST_CMD]\n"
+    printf ">>>LOG:\n$LOG<<<END LOG\n"
+    exit $RETURNCODE
+}
+
+log_wrap(){
+export BASHOPTS
+LOG="$LOG$($@)\n";RETURNCODE=$?;
+export LOG
+return $RETURNCODE
+}
+
+log_send(){
+    printf "$LOG" | sendmail
+}
+
+checkmount(){
+    log_wrap grep -qs "$1" /proc/mounts 
+}
+
+tarxz(){
+    local SOURCE="$1"
+    local TARGET="$2"
+    XZ_OPT="-4e -T 0" log_wrap tar -c -J -C / -f "$TARGET" "$SOURCE"
+    return $?
+}
+
+setup "$@"
+main
+exit 0
+'''
+
+if __name__=='__main__':
+    sys.exit(main())