backup timer lkk-nix-1
This commit is contained in:
parent
d32f0ec691
commit
791c61aa94
|
@ -7,5 +7,5 @@
|
||||||
users.defaultUserShell = pkgs.fish;
|
users.defaultUserShell = pkgs.fish;
|
||||||
|
|
||||||
environment.systemPackages =
|
environment.systemPackages =
|
||||||
[ inputs.agenix.packages.x86_64-linux.default pkgs.coreutils ];
|
[ inputs.agenix.packages.x86_64-linux.default pkgs.coreutils pkgs.fd ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
timers.backup-timer = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
partOf = [ "backup-timer.service" ];
|
||||||
|
timerConfig.OnCalendar = "*-*-* 4:00:00";
|
||||||
|
};
|
||||||
|
services.backup-timer = {
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
script = ''
|
||||||
|
BKG_DIR=/var/backup
|
||||||
|
|
||||||
|
EXCLUDE_APPS=("s3/")
|
||||||
|
EXCLUDE_VOLUMES=("wireguard_data")
|
||||||
|
EXCLUDE_CLEANUP=("s3/")
|
||||||
|
|
||||||
|
DAYS=7 # how many days should daily backups be stored
|
||||||
|
DF=daily # folder name for daily backups
|
||||||
|
WF=weekly # folder name for weekly backups
|
||||||
|
MF=monthly # folder name for monthly backups
|
||||||
|
|
||||||
|
MBD=22 # day of month for monthly backup
|
||||||
|
WBD=3 # weekday for weekly backups
|
||||||
|
PV=podman-volumes # folder name for podman volumes
|
||||||
|
|
||||||
|
cd $BKG_DIR
|
||||||
|
PODMAN_VOLUMES=$(podman volume ls --format '{{.Name}}')
|
||||||
|
# Podman volume backup
|
||||||
|
if [ ! -d $PV ]; then
|
||||||
|
mkdir $PV
|
||||||
|
fi
|
||||||
|
for vol in $PODMAN_VOLUMES; do
|
||||||
|
if [[ " $\{EXCLUDE_VOLUMES[@]} " =~ " $\{vol} " ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
cd $BKG_DIR/$PV
|
||||||
|
podman volume export $vol --output $vol.tar ; gzip $vol.tar
|
||||||
|
done
|
||||||
|
|
||||||
|
BACKUP_APPS=$(fd . -td -d 1 $BKG_DIR)
|
||||||
|
# App backup
|
||||||
|
for bkg in $BACKUP_APPS; do
|
||||||
|
if [[ " $\{EXCLUDE_APPS[@]} " =~ " $\{bkg} " ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
cd $bkg
|
||||||
|
#monthly
|
||||||
|
if [ ! -d $MF ]; then
|
||||||
|
mkdir $MF
|
||||||
|
fi
|
||||||
|
DOM=$(date +%d)
|
||||||
|
if [ $DOM -eq $MBD ]; then
|
||||||
|
fd . -tf -d 1 -x cp {/} $MF/$(date +"%Y%m")-{/}
|
||||||
|
fi
|
||||||
|
|
||||||
|
#weekly
|
||||||
|
if [ ! -d $WF ]; then
|
||||||
|
mkdir $WF
|
||||||
|
fi
|
||||||
|
DOW=$(date +%u)
|
||||||
|
if [ $DOW -eq $WBD ]; then
|
||||||
|
fd . -tf -d 1 -x cp {/} $WF/$(date +"%U%Y")-{/}
|
||||||
|
fi
|
||||||
|
|
||||||
|
#dailies
|
||||||
|
if [ ! -d $DF ]; then
|
||||||
|
mkdir $DF
|
||||||
|
fi
|
||||||
|
fd . -tf -d 1 -x mv {/} $DF/$(date +"%Y%m%d")-{/}
|
||||||
|
done
|
||||||
|
|
||||||
|
# Delete old backups
|
||||||
|
for bkg in $BACKUP_APPS; do
|
||||||
|
if [[ " $\{EXCLUDE_CLEANUP[@]} " =~ " $\{bkg} " ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fd . $bkg"daily" --changed-before "$DAYS days" -x rm
|
||||||
|
fd . $bkg"weekly" --changed-before "4 weeks" -x rm
|
||||||
|
fd . $bkg"monthly" --changed-before "8 weeks" -x rm
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./backup.nix
|
||||||
./container.nix
|
./container.nix
|
||||||
./gitea.nix
|
./gitea.nix
|
||||||
./invidious.nix
|
./invidious.nix
|
||||||
|
|
Loading…
Reference in New Issue