Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #Environment: An Archlinux driven PC
- #
- #Purpose: Let a newbie user safely shutdown his PC by:
- # 1. Automatically run an incremental backup via rsync;
- # 2. Automatically check if timeshift is needed;
- # 3. Shutdown
- #as well as:
- # 4. Timing a safe shutdown via the User's crontab
- #
- #Args: None for full manual choice, or any combo of commands - e.g. '3',
- # see "case $A in" here below
- #
- #Required: [Archlinux]: timeshift, dialog, pacman, yay, cronie
- #Scripts:
- # 'pbpushme' -> send a [pushbullet](https://www.pushbullet.com/) notification to a mobile device - if needed;
- # 'bupday' -> any backup script, in my case using rsync
- #
- #######################################################################################
- # Auth='Piero Versace aka Piero Strada'
- # Rel='01 set 2021, 15:36:49, CET'
- # Upd='07 set 2022, 12:00:49, CET'
- # Ver='1.0.0'
- # mVer='5'
- #######################################################################################
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see [[http://www.gnu.org/licenses/]].
- #######################################################################################
- #User's crontab -e:
- #13 13 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER/.local/bin/bupdown 3"
- #10 15 * * * echo '/usr/bin/TERMINAL -e "/home/USER/.local/bin/bupdown 3"' | at now + 1 minute
- #E1 50 09 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER2/.local/bin/bupdown 5"
- #Ek 50 22 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER2/.local/bin/bupdown 5"
- USER1='user1'
- USER2='user2'
- Kom="$1"
- Kpm='/usr/bin/pacman'
- Kts='/usr/bin/timeshift'
- Kpm='/usr/bin/yay'
- Kpo='/usr/bin/poweroff'
- Kbup='bupday'
- Kpush='pbpushme'
- GraceSec=''
- Answer="/tmp/Ans"
- touch "$Answer"
- uNAME=$(echo $0|cut --delimiter='/' -f 3)
- Kbu="/home/$uNAME/.local/bin/$Kbup"
- Kpu='echo'
- [ "$uNAME" = "$USER1" ] && Kpu="/home/$uNAME/.local/bin/$Kpush"
- [ "$uNAME" = "USER2" ] && Kpu="/home/$uNAME/.local/bin/$Kpush"
- tsChk(){
- if [ "$Kom" = '' ];then
- if [ "$TSunit" = '' ];then
- echo "ATTENZIONE, 'timeshift' non configurato."
- echo 'Abort'
- exit 2
- fi
- #isbt=$(df -h -t btrfs 2>/dev/null)
- isbt=$(df -Th / | grep btrfs 2>/dev/null)
- if [ "$isbt" != '' ];then
- echo "btrfs detected" >/dev/stderr
- else
- sudo timeshift --snapshot-device /dev/$TSunit
- sudo timeshift --check
- fi
- else
- sudo timeshift --check
- fi
- }
- if [ "$Kom" = '' ];then
- A=''
- act=''
- dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Puoi spegnere il PC eseguendo prima un backup." --menu "Scegli:" 15 50 6 \
- 1 "Backup veloce E SPEGNI" 2 "Backup veloce + AGGIORNA, E SPEGNI" 3 "Backup COMPLETO + AGGIORNA, E SPEGNI" 4 "SPEGNI subito senza Backup" 5 "Test" 2>"$Answer"
- A=$(< "$Answer")
- else
- A="$Kom"
- GraceSec='60'
- paplay $HOME/.local/share/mysounds/dialog-warning.ogg 2>/dev/null &
- fi
- case $A in
- 1)
- act="Hai scelto $A: Backup veloce & Spegni"
- if [ "$GraceSec" != '' ];then dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:" --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
- tsChk
- Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
- #[ "$GraceSec" != '' ] && $Kpu "$Cho"
- sudo $Kpo
- ;;
- 2)
- act="Hai scelto $A: Backup veloce + AGGIORNA, E Spegni"
- if [ "$GraceSec" != '' ];then dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:" --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
- tsChk
- $Kpm -Syu --noconfirm
- Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
- #[ "$GraceSec" != '' ] && $Kpu "$Cho"
- sudo $Kpo
- ;;
- 3)
- act="Hai scelto $A: Backup COMPLETO + AGGIORNA, E Spegni"
- if [ "$GraceSec" != '' ];then dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:" --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
- tsChk
- sudo $Kbu
- $Kpm -Syu --noconfirm
- Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
- #[ "$GraceSec" != '' ] && $Kpu "$Cho"
- sudo $Kpo
- ;;
- 4)
- act="Hai scelto $A: SPEGNI SUBITO"
- if [ "$GraceSec" != '' ];then dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:" --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
- Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
- #[ "$GraceSec" != '' ] && $Kpu "$Cho"
- sudo $Kpo
- ;;
- 5)
- act="Hai scelto $A: Comando di test"
- if [ "$GraceSec" != '' ];then dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:" --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
- Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
- #[ "$GraceSec" != '' ] && $Kpu "$Cho"
- echo 'Comando annullato'
- ;;
- *)
- echo "Comando annullato: abort"
- exit
- esac
- rm "$Answer"
- exit
Advertisement
Add Comment
Please, Sign In to add comment