Last active

Embed URL


SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Wrap shell command around btrfs snapper pre-post snapshots and log outputs.

View snp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/usr/bin/env bash
# Runs a command wrapped in btrfs snapper pre-post snapshots.
date=$(date "+%Y-%m-%d-%H%M%S")
! [ -d $log_path ] && mkdir -p $log_path
# Log stdout and stderr. Reference:
exec > >(tee -a "$log_file")
exec 2> >(tee -a "$log_file" >&2)
echo "> Logging to: ${log_file}"
snapshot_nbr=$(snapper create --type=pre --cleanup-algorithm=number --print-number --description="${cmd}")
echo "> New pre snapshot with number ${snapshot_nbr}."
echo -e "> Running command \"${cmd}\".\n"
eval "$cmd"
snapshot_nbr=$(snapper create --type=post --cleanup-algorithm=number --print-number --pre-number="$snapshot_nbr")
echo -e "\n> New post snapshot with number ${snapshot_nbr}."
# Snapper has a --command option nowadays. But it works worse, the output from the command is not printed separately from the snaptshot number, just becomes a mess.
#echo "> Running command \"${cmd}\"."
#snapshot_nbr=$(snapper create --command "${cmd}" --print-number --cleanup-algorithm=number --description="${cmd}" | tail -1)
#echo -e "\n> New pre-post snapshot with numbers ${snapshot_nbr}."

Hi! Out of curiosity, why did you choose /var/local/log instead /var/log?


Hi msx!

I use the local directory to not confuse my custom files and scripts with the systems. The very same reason people put their own system scripts under /usr/local/{bin,sbin} instead of /usr/{bin,sbin} :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.