mirror of
https://github.com/Antynea/grub-btrfs.git
synced 2026-10-20 02:42:03 +08:00
grub-btrfsd: watch more than one snapshot dir
Fix #262 Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
This commit is contained in:
+67
-53
@@ -38,9 +38,9 @@ grub_btrfs_config="${sysconfdir}/default/grub-btrfs/config"
|
||||
|
||||
print_help() {
|
||||
echo "${CYAN}[?] Usage:"
|
||||
echo "${0##*/} [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-r, --recursive] [-s, --syslog] [-t, --timeshift-auto] [-v, --verbose] SNAPSHOTS_DIR"
|
||||
echo "${0##*/} [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-r, --recursive] [-s, --syslog] [-t, --timeshift-auto] [-v, --verbose] SNAPSHOTS_DIRS"
|
||||
echo
|
||||
echo "SNAPSHOTS_DIR Snapshot directory to watch, without effect when --timeshift-auto"
|
||||
echo "SNAPSHOTS_DIRS Snapshot directories to watch, without effect when --timeshift-auto"
|
||||
echo
|
||||
echo "Optional arguments:"
|
||||
echo "-c, --no-color Disable colors in output"
|
||||
@@ -196,7 +196,7 @@ if [ ${timeshift_auto} = false ] && [ ${timeshift_old} = true ]; then
|
||||
fi
|
||||
|
||||
vlog "Arguments:"
|
||||
vlog "Snapshot directory: $snapshots"
|
||||
vlog "Snapshot directories: $snapshots"
|
||||
vlog "Timestift autodetection: $timeshift_auto"
|
||||
vlog "Timeshift old: $timeshift_old"
|
||||
vlog "Logfile: $logfile"
|
||||
@@ -236,61 +236,75 @@ create_grub_menu() {
|
||||
set_snapshot_dir() {
|
||||
# old timeshift has it's snapshot dir in a different location
|
||||
if [ "${timeshift_old}" = true ]; then
|
||||
snapshots="/run/timeshift/backup/timeshift-btrfs/snapshots"
|
||||
snapdir="/run/timeshift/backup/timeshift-btrfs/snapshots"
|
||||
else
|
||||
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
|
||||
snapdir="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
|
||||
fi
|
||||
}
|
||||
|
||||
# start the actual daemon
|
||||
vlog "Snapshot dir watchtimeout: $watchtime"
|
||||
vlog "Entering infinite while" "${GREEN}"
|
||||
while true; do
|
||||
runs=false
|
||||
if [ ${timeshift_auto} = true ] && ! [ "${timeshift_pid}" -gt 0 ] ; then
|
||||
# watch the timeshift folder for a folder that is created when timeshift starts up
|
||||
sleep 1 # for safety so the outer while is not going crazy
|
||||
if [ "${timeshift_pid}" -eq -2 ]; then
|
||||
log "detected timeshift shutdown"
|
||||
fi
|
||||
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
||||
if [ "${#timeshift_pid}" -gt 0 ]; then
|
||||
set_snapshot_dir
|
||||
log "detected running Timeshift at daemon startup, PID is: $timeshift_pid"
|
||||
vlog "new snapshots directory is $snapshots"
|
||||
else
|
||||
log "Watching /run/timeshift for timeshift to start"
|
||||
inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && {
|
||||
sleep 1
|
||||
daemon_function() {
|
||||
# start the actual daemon
|
||||
snapdir=$1
|
||||
vlog "Snapshot dir watchtimeout: $watchtime"
|
||||
vlog "Entering infinite while for $snapdir" "${GREEN}"
|
||||
while true; do
|
||||
runs=false
|
||||
if [ ${timeshift_auto} = true ] && ! [ "${timeshift_pid}" -gt 0 ] ; then
|
||||
# watch the timeshift folder for a folder that is created when timeshift starts up
|
||||
sleep 1 # for safety so the outer while is not going crazy
|
||||
if [ "${timeshift_pid}" -eq -2 ]; then
|
||||
log "detected timeshift shutdown"
|
||||
fi
|
||||
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
||||
set_snapshot_dir
|
||||
log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}"
|
||||
vlog "new snapshots directory is $snapshots" "${CYAN}"
|
||||
(create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this
|
||||
}
|
||||
fi
|
||||
runs=false
|
||||
else
|
||||
while [ -d "$snapshots" ]; do
|
||||
# watch the actual snapshots folder for a new snapshot or a deletion of a snapshot
|
||||
if [ ${runs} = false ] && [ ${verbose} = false ]; then
|
||||
log "Watching $snapshots for new snapshots..." "${CYAN}"
|
||||
else
|
||||
vlog "Watching $snapshots for new snapshots..." "${CYAN}"
|
||||
fi
|
||||
runs=true
|
||||
inotifywait ${inotify_qiet_flag} ${inotify_recursive_flag} -e create -e delete -e unmount -t "$watchtime" "$snapshots" && {
|
||||
log "Detected snapshot creation/ deletion, recreating Grub menu" "${CYAN}"
|
||||
sleep 5
|
||||
create_grub_menu
|
||||
}
|
||||
sleep 1
|
||||
done
|
||||
timeshift_pid=-2
|
||||
fi
|
||||
if ! [ ${timeshift_auto} = true ] && ! [ -d "${snapshots}" ] ; then # in case someone deletes the snapshots folder (in snapper mode) to prevent the while loop from going wild
|
||||
break
|
||||
fi
|
||||
if [ "${#timeshift_pid}" -gt 0 ]; then
|
||||
set_snapshot_dir
|
||||
log "detected running Timeshift at daemon startup, PID is: $timeshift_pid"
|
||||
vlog "new snapshots directory is $snapdir"
|
||||
else
|
||||
log "Watching /run/timeshift for timeshift to start"
|
||||
inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && {
|
||||
sleep 1
|
||||
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
||||
set_snapshot_dir
|
||||
log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}"
|
||||
vlog "new snapshots directory is $snapdir" "${CYAN}"
|
||||
(create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this
|
||||
}
|
||||
fi
|
||||
runs=false
|
||||
else
|
||||
while [ -d "$snapdir" ]; do
|
||||
# watch the actual snapshots folder for a new snapshot or a deletion of a snapshot
|
||||
if [ ${runs} = false ] && [ ${verbose} = false ]; then
|
||||
log "Watching $snapdir for new snapshots..." "${CYAN}"
|
||||
else
|
||||
vlog "Watching $snapdir for new snapshots..." "${CYAN}"
|
||||
fi
|
||||
runs=true
|
||||
inotifywait ${inotify_qiet_flag} ${inotify_recursive_flag} -e create -e delete -e unmount -t "$watchtime" "$snapdir" && {
|
||||
log "Detected snapshot creation/ deletion, recreating Grub menu" "${CYAN}"
|
||||
sleep 5
|
||||
create_grub_menu
|
||||
}
|
||||
sleep 1
|
||||
done
|
||||
timeshift_pid=-2
|
||||
fi
|
||||
if ! [ ${timeshift_auto} = true ] && ! [ -d "${snapdir}" ] ; then # in case someone deletes the snapshots folder (in snapper mode) to prevent the while loop from going wild
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# for all dirs that got passed to the script, start a new fork with that dir
|
||||
snapdirs=( "${@}" )
|
||||
for snapdir in "${snapdirs[@]}"
|
||||
do
|
||||
vlog "starting daemon with watching $snapdir..."
|
||||
daemon_function "${snapdir}" &
|
||||
done
|
||||
|
||||
wait # wait for forks to finish, kill child forks if SIGTERM is sent
|
||||
|
||||
|
||||
exit 0 # tradition is tradition
|
||||
|
||||
Reference in New Issue
Block a user