pierostrada

back-up-update-and-poweroff

Feb 4th, 2023
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.59 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. #Environment: An Archlinux driven PC
  4. #
  5. #Purpose: Let a newbie user safely shutdown his PC by:
  6. #   1. Automatically run an incremental backup via rsync;
  7. #   2. Automatically check if timeshift is needed;
  8. #   3. Shutdown
  9. #as well as:
  10. #   4. Timing a safe shutdown via the User's crontab
  11. #
  12. #Args: None for full manual choice, or any combo of commands - e.g. '3',
  13. # see "case $A in" here below
  14. #
  15. #Required: [Archlinux]: timeshift, dialog, pacman, yay, cronie
  16. #Scripts:
  17. #   'pbpushme'  -> send a [pushbullet](https://www.pushbullet.com/) notification to a mobile device - if needed;
  18. #   'bupday'    -> any backup script, in my case using rsync
  19. #
  20. #######################################################################################
  21. #   Auth='Piero Versace aka Piero Strada'
  22. #   Rel='01 set 2021, 15:36:49, CET'
  23. #   Upd='07 set 2022, 12:00:49, CET'
  24. #   Ver='1.0.0'
  25. #   mVer='5'
  26. #######################################################################################
  27. #   This program is free software: you can redistribute it and/or modify
  28. #   it under the terms of the GNU General Public License as published by
  29. #   the Free Software Foundation, either version 3 of the License, or
  30. #   (at your option) any later version.
  31. #
  32. #   This program is distributed in the hope that it will be useful,
  33. #   but WITHOUT ANY WARRANTY; without even the implied warranty of
  34. #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35. #   GNU General Public License for more details.
  36. #
  37. #   You should have received a copy of the GNU General Public License
  38. #   along with this program.  If not, see [[http://www.gnu.org/licenses/]].
  39. #######################################################################################
  40.  
  41.  
  42. #User's crontab -e:
  43. #13 13 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER/.local/bin/bupdown 3"
  44. #10 15 * * * echo '/usr/bin/TERMINAL -e "/home/USER/.local/bin/bupdown 3"' | at now + 1 minute
  45. #E1 50 09 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER2/.local/bin/bupdown 5"
  46. #Ek 50 22 * * * eval "export DISPLAY=:0";/usr/bin/TERMINAL -e "/home/USER2/.local/bin/bupdown 5"
  47.  
  48. USER1='user1'
  49. USER2='user2'
  50.  
  51. Kom="$1"
  52. Kpm='/usr/bin/pacman'
  53. Kts='/usr/bin/timeshift'
  54. Kpm='/usr/bin/yay'
  55. Kpo='/usr/bin/poweroff'
  56. Kbup='bupday'
  57. Kpush='pbpushme'
  58. GraceSec=''
  59. Answer="/tmp/Ans"
  60. touch "$Answer"
  61. uNAME=$(echo $0|cut --delimiter='/' -f 3)
  62. Kbu="/home/$uNAME/.local/bin/$Kbup"
  63. Kpu='echo'
  64. [ "$uNAME" = "$USER1" ] && Kpu="/home/$uNAME/.local/bin/$Kpush"
  65. [ "$uNAME" = "USER2" ] && Kpu="/home/$uNAME/.local/bin/$Kpush"
  66. tsChk(){
  67.     if [ "$Kom" = '' ];then
  68.         if [ "$TSunit" = '' ];then
  69.             echo "ATTENZIONE, 'timeshift' non configurato."
  70.             echo 'Abort'
  71.             exit 2
  72.         fi
  73.         #isbt=$(df -h -t btrfs 2>/dev/null)
  74.         isbt=$(df -Th / | grep btrfs 2>/dev/null)
  75.         if [ "$isbt" != '' ];then
  76.             echo "btrfs detected" >/dev/stderr
  77.         else
  78.             sudo timeshift --snapshot-device /dev/$TSunit
  79.             sudo timeshift --check
  80.         fi
  81.     else
  82.         sudo timeshift --check
  83.     fi
  84. }
  85. if [ "$Kom" = '' ];then
  86.     A=''
  87.     act=''
  88.     dialog --backtitle "BACKUP + SPEGNIMENTO" --title "Puoi spegnere il PC eseguendo prima un backup." --menu "Scegli:" 15 50 6 \
  89. 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"
  90.     A=$(< "$Answer")
  91. else
  92.     A="$Kom"
  93.     GraceSec='60'
  94.     paplay $HOME/.local/share/mysounds/dialog-warning.ogg 2>/dev/null &
  95. fi
  96.  
  97. case $A in
  98.        1)
  99.            act="Hai scelto $A: Backup veloce & Spegni"
  100.            if [ "$GraceSec" != '' ];then dialog  --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:"  --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
  101.            tsChk
  102.            Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
  103.            #[ "$GraceSec" != '' ] && $Kpu "$Cho"
  104.            sudo $Kpo
  105.            ;;
  106.        2)
  107.            act="Hai scelto $A: Backup veloce + AGGIORNA, E Spegni"
  108.            if [ "$GraceSec" != '' ];then dialog  --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:"  --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
  109.            tsChk
  110.            $Kpm -Syu --noconfirm
  111.            Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
  112.            #[ "$GraceSec" != '' ] && $Kpu "$Cho"
  113.            sudo $Kpo
  114.            ;;
  115.        3)
  116.            act="Hai scelto $A: Backup COMPLETO + AGGIORNA, E Spegni"
  117.            if [ "$GraceSec" != '' ];then dialog  --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:"  --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
  118.            tsChk
  119.            sudo $Kbu
  120.            $Kpm -Syu --noconfirm
  121.            Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
  122.            #[ "$GraceSec" != '' ] && $Kpu "$Cho"
  123.            sudo $Kpo
  124.            ;;
  125.        4)
  126.            act="Hai scelto  $A: SPEGNI SUBITO"
  127.            if [ "$GraceSec" != '' ];then dialog  --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:"  --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
  128.            Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
  129.            #[ "$GraceSec" != '' ] && $Kpu "$Cho"
  130.            sudo $Kpo
  131.            ;;
  132.        5)
  133.            act="Hai scelto  $A: Comando di test"
  134.            if [ "$GraceSec" != '' ];then dialog  --backtitle "BACKUP + SPEGNIMENTO" --title "Spegnimento Programmato in $GraceSec secondi:"  --pause "$act" 10 60 $GraceSec && echo ok || exit 10;fi
  135.            Cho="[$(date|awk '{print $1,$2,$3,$4,$5}' | sed 's/,\([^,]*\)$/]\1/') $act"
  136.            #[ "$GraceSec" != '' ] && $Kpu "$Cho"
  137.            echo 'Comando annullato'
  138.            ;;
  139.        *)
  140.            echo "Comando annullato: abort"
  141.            exit
  142. esac
  143. rm "$Answer"
  144. exit
Advertisement
Add Comment
Please, Sign In to add comment