mirror of
https://codeberg.org/privacy1st/nix-git
synced 2024-11-21 22:03:19 +01:00
yodaHedgehog: backup service
This commit is contained in:
parent
9a0f7cac7d
commit
f66ecbd985
12
examples/block-until-remote-reachable.sh
Normal file
12
examples/block-until-remote-reachable.sh
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
|
# Wait until the host yodaNas is reachable with SSH.
|
||||||
|
while :; do
|
||||||
|
result="$(ssh yodaNas 'hostname')" && e=0 || e=$?
|
||||||
|
if [ "${e}" = 0 ] && [ "${result}" = 'yodaNas' ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
printf '%s\n' 'Delaying due to SSH connectivity problems.'
|
||||||
|
sleep 10s
|
||||||
|
done
|
@ -1,9 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
# As long as there is the file `stay-alive` at host `yodaNas`,
|
# As long as there is the file `stay-alive` at host `yodaNas`,
|
||||||
# this loop blocks/waits.
|
# this loop blocks/waits.
|
||||||
while :; do
|
while :; do
|
||||||
result="$(ssh yodaNas 'ls stay-alive 2>&1')"
|
result="$(ssh yodaNas 'ls stay-alive 2>&1')" || :
|
||||||
case "${result}" in
|
case "${result}" in
|
||||||
*"No such file or directory")
|
*"No such file or directory")
|
||||||
break
|
break
|
||||||
|
@ -37,16 +37,12 @@ in
|
|||||||
timerConfig = {
|
timerConfig = {
|
||||||
OnCalendar = [
|
OnCalendar = [
|
||||||
# Daily
|
# Daily
|
||||||
"*-*-* 00:00:05"
|
"*-*-* 00:05:00"
|
||||||
];
|
];
|
||||||
WakeSystem = true;
|
WakeSystem = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
systemd.services."daily-backup-and-suspend" = {
|
systemd.services."daily-backup-and-suspend" = {
|
||||||
# If the system wakes up at 00:05, it is not directly connected to the Internet.
|
|
||||||
# Thus, `btrbk` might fail with the following error while connecting to `rootNas`:
|
|
||||||
# ssh: Could not resolve hostname p1st.de: Name or service not known
|
|
||||||
# To avoid this, we depend on the `network-online` systemd target.
|
|
||||||
after = [ "network-online.target" ];
|
after = [ "network-online.target" ];
|
||||||
# Packages required for this script.
|
# Packages required for this script.
|
||||||
# For `ssh` and `journalwatch`, there are assertions above.
|
# For `ssh` and `journalwatch`, there are assertions above.
|
||||||
@ -70,6 +66,23 @@ in
|
|||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
#printf '%s\n' 'Starting backup script.'
|
#printf '%s\n' 'Starting backup script.'
|
||||||
|
|
||||||
|
# Wait until ${backup-source} is reachable.
|
||||||
|
#
|
||||||
|
# This test is necessary because of the following:
|
||||||
|
# If the system wakes up at 00:05, it is not directly connected to the Internet.
|
||||||
|
# The config option `after = [ "network-online.target" ];` does not help in this regard.
|
||||||
|
# Thus, `btrbk` might fail with the following error while connecting to ${backup-source}:
|
||||||
|
# ssh: Could not resolve hostname p1st.de: Name or service not known
|
||||||
|
#
|
||||||
|
while :; do
|
||||||
|
result="$(ssh ${backup-source} 'echo ${backup-source}')" && e=0 || e=$?
|
||||||
|
if [ "''${e}" = 0 ] && [ "''${result}" = '${backup-source}' ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
printf '%s\n' 'Delaying backup due to SSH connectivity problems.'
|
||||||
|
sleep 10s
|
||||||
|
done
|
||||||
|
|
||||||
# Pull BTRFS snapshots from ${backup-source}.
|
# Pull BTRFS snapshots from ${backup-source}.
|
||||||
btrbk -c /etc/btrbk/remote-backup-ssd.conf run
|
btrbk -c /etc/btrbk/remote-backup-ssd.conf run
|
||||||
btrbk -c /etc/btrbk/remote-backup-hdd.conf run
|
btrbk -c /etc/btrbk/remote-backup-hdd.conf run
|
||||||
@ -88,7 +101,7 @@ in
|
|||||||
printf '%s\n' 'Delaying suspend due to SSH connectivity problems.'
|
printf '%s\n' 'Delaying suspend due to SSH connectivity problems.'
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
sleep 10s
|
sleep 60s
|
||||||
done
|
done
|
||||||
|
|
||||||
# Wait until no BTRFS scrub service is running.
|
# Wait until no BTRFS scrub service is running.
|
||||||
|
Loading…
Reference in New Issue
Block a user