Add script 'reboot-LXC-host.sh'.
This commit is contained in:
		
							
								
								
									
										311
									
								
								reboot-LXC-host.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										311
									
								
								reboot-LXC-host.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,311 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | script_name="$(basename $(realpath $0))" | ||||||
|  | working_dir="$(dirname $(realpath $0))" | ||||||
|  |  | ||||||
|  | conf_file="${working_dir}/conf/${script_name%%.*}.conf" | ||||||
|  |  | ||||||
|  | log_file="$(mktemp)" | ||||||
|  | random_prefix="$(head -c 300 /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c  8)" | ||||||
|  |  | ||||||
|  | backup_date=$(date +%Y-%m-%d-%H%M) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ============= | ||||||
|  | # --- Some Variables | ||||||
|  | # ============= | ||||||
|  |  | ||||||
|  | declare -a lx_container_arr=() | ||||||
|  | declare -a lx_running_container_arr=() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ============= | ||||||
|  | # --- Some Functions | ||||||
|  | # ============= | ||||||
|  |  | ||||||
|  | clean_up() { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    if [[ -f "$_backup_crontab_file" ]]; then | ||||||
|  |  | ||||||
|  |       blank_line | ||||||
|  |       echononl "   (Re)Install Crontab from previously saved crontab file | ||||||
|  |       '$_backup_crontab_file'.." | ||||||
|  |  | ||||||
|  |       crontab $_backup_crontab_file >> $log_file 2>&1 | ||||||
|  |  | ||||||
|  |       if [[ $? -eq 0 ]]; then | ||||||
|  |          echo_ok | ||||||
|  |       else | ||||||
|  |          echo_failed | ||||||
|  |          error "$(cat $log_file)" | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |    fi | ||||||
|  |  | ||||||
|  |    # Perform program exit housekeeping | ||||||
|  |    rm -f $log_file | ||||||
|  |    rm -rf /tmp/*.${random_prefix} | ||||||
|  |    blank_line | ||||||
|  |    exit $1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | echononl(){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo X\\c > /tmp/shprompt$$ | ||||||
|  |       if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then | ||||||
|  |          echo -e -n "[ \033[5m\033[1m....\033[m ]\033[13G$*\\c" 1>&2 | ||||||
|  |       else | ||||||
|  |          echo -e -n "[ \033[5m\033[1m....\033[m ]\033[13G$*" 1>&2 | ||||||
|  |       fi | ||||||
|  |       rm /tmp/shprompt$$ | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | #echo_print_command() { | ||||||
|  | #   if $terminal ; then | ||||||
|  | #      echo X\\c > /tmp/shprompt$$ | ||||||
|  | #      if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then | ||||||
|  | #         echo -e -n "\033[60G - \033[1m$*\\c\033[m" 1>&2 | ||||||
|  | #      else | ||||||
|  | #         echo -e -n "\033[60G - \033[1m$*\033[m" 1>&2 | ||||||
|  | #      fi | ||||||
|  | #      rm /tmp/shprompt$$ | ||||||
|  | #   fi | ||||||
|  | #} | ||||||
|  | echo_print_command() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo X\\c > /tmp/shprompt$$ | ||||||
|  |       if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then | ||||||
|  |          echo -e -n "\n\033[13G\033[1m$*\\c\033[m" 1>&2 | ||||||
|  |       else | ||||||
|  |          echo -e -n "\n\033[13G\033[1m$*\033[m" 1>&2 | ||||||
|  |       fi | ||||||
|  |       rm /tmp/shprompt$$ | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_done() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;32mdone\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_ok() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;32mok\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_ignore() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;33mignore\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_warning() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;33m\033[1mwarn\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_failed(){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;31mfail\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_skipped() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[1G[ \033[1;37mskip\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_wait(){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -en "\033[1G[ \033[5m\033[1m...\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | fatal (){ | ||||||
|  |    blank_line | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "[ \033[31m\033[1mFatal\033[m ] \033[13G\033[37m\033[1m$*\033[m" | ||||||
|  |       echo "" | ||||||
|  |       echo -e " \033[13G\033[31m\033[1mScript will be interrupted..\033[m\033[m" | ||||||
|  |    else | ||||||
|  |       echo "fatal: $*" | ||||||
|  |       echo "Script will be interrupted.." | ||||||
|  |    fi | ||||||
|  |    clean_up 1 | ||||||
|  | } | ||||||
|  | error(){ | ||||||
|  |    blank_line | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "[ \033[31m\033[1mFehler\033[m ]\033[13G$*" | ||||||
|  |    else | ||||||
|  |       echo "" | ||||||
|  |       echo "[ Error ]: $*" | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  |    blank_line | ||||||
|  | } | ||||||
|  |  | ||||||
|  | warn (){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |       echo -e "[ \033[33m\033[1mWarning\033[m ]\033[13G$*" | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | info (){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |       echo -e "[ \033[32m\033[1mInfo\033[m ]\033[13G$*" | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ## - Check if a given array (parameter 2) contains a given string (parameter 1) | ||||||
|  | ## - | ||||||
|  | containsElement () { | ||||||
|  |    local e | ||||||
|  |    for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done | ||||||
|  |    return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | trim() { | ||||||
|  |     local var="$*" | ||||||
|  |     var="${var#"${var%%[![:space:]]*}"}"   # remove leading whitespace characters | ||||||
|  |     var="${var%"${var##*[![:space:]]}"}"   # remove trailing whitespace characters | ||||||
|  |     echo -n "$var" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | blank_line() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ============= | ||||||
|  | # --- Jobhandling | ||||||
|  | # ============= | ||||||
|  |  | ||||||
|  | # - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM | ||||||
|  | # - | ||||||
|  | trap clean_up SIGHUP SIGINT SIGTERM | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ============= | ||||||
|  | # --- Some Checks | ||||||
|  | # ============= | ||||||
|  |  | ||||||
|  | # - Running in a terminal? | ||||||
|  | # - | ||||||
|  | if [[ -t 1 ]] ; then | ||||||
|  |    terminal=true | ||||||
|  | else | ||||||
|  |    terminal=false | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | which lxc-ls || fatal "Seems not to be a LX Host. Missing command \033[33mlxc-ls" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ========== | ||||||
|  | # - Begin Main Script | ||||||
|  | # ========== | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | # - Headline | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  | if $terminal ; then | ||||||
|  |    echo "" | ||||||
|  |    echo -e "\033[1m----------\033[m" | ||||||
|  |    echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m" | ||||||
|  |    echo -e "\033[1m----------\033[m" | ||||||
|  |    echo "" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | echononl "Get List of \033[1mall existing\033[m LX Contaoner.." | ||||||
|  |  | ||||||
|  | _failed=false | ||||||
|  | for _container in $(lxc-ls) ; do | ||||||
|  |    lx_container_arr+=("$_container") | ||||||
|  |    [[ $? -gt 0 ]] && _falied=true | ||||||
|  | done | ||||||
|  | if $_failed ; then | ||||||
|  |    echo_failed | ||||||
|  |    fatal "Getting list of \033[1mall\033[m LX-Container failed!" | ||||||
|  | else | ||||||
|  |    echo_done | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | _failed=false | ||||||
|  | echononl "Get List of \033[1mrunning\033[m LX Contaoner.." | ||||||
|  | for _container in $(lxc-ls --running) ; do | ||||||
|  |    lx_running_container_arr+=("$_container") | ||||||
|  |    [[ $? -gt 0 ]] && _falied=true | ||||||
|  | done | ||||||
|  | if $_failed ; then | ||||||
|  |    echo_failed | ||||||
|  |    fatal "Getting list of \033[1mrunning\033[m LX-Container failed!" | ||||||
|  | else | ||||||
|  |    echo_done | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if $terminal ; then | ||||||
|  |    echo "" | ||||||
|  |    echo "" | ||||||
|  |    echo -e "\033[13G\033[1mMain part of script ..\033[m" | ||||||
|  |    echo "" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ ${#lx_container_arr[@]} -eq 0 ]]; then | ||||||
|  |    warn "No LX Container found!" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ ${#lx_container_arr[@]} -gt 0 ]]; then | ||||||
|  |    if [[ ${#lx_running_container_arr[@]} -eq 0 ]]; then | ||||||
|  |       warn "No running LX Container found!" | ||||||
|  |    fi | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if [[ ${#lx_container_arr[@]} -gt 0 ]]; then | ||||||
|  |  | ||||||
|  |    for _lx_container in "${lx_container_arr[@]}" ; do | ||||||
|  |  | ||||||
|  |       echononl "Stopping Container ${_lx_container}.." | ||||||
|  |  | ||||||
|  |       if containsElement "$_lx_container"  "${lx_running_container_arr[@]}" ; then | ||||||
|  |  | ||||||
|  |          lxc-stop -n ${_lx_container} > $log_file 2>&1 | ||||||
|  |  | ||||||
|  |          if [[ $? -gt 0 ]]; then | ||||||
|  |             echo_failed | ||||||
|  |             fatal "$(cat $log_file)" | ||||||
|  |          else | ||||||
|  |             echo_done | ||||||
|  |          fi | ||||||
|  |       else | ||||||
|  |          echo_skipped | ||||||
|  |       fi | ||||||
|  |    done | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if $terminal ; then | ||||||
|  |    echo "" | ||||||
|  |    echo "" | ||||||
|  |    echo -e "\033[13G\033[1mGoing to reboot the system ..\033[m" | ||||||
|  |    echo "" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | /sbin/reboot | ||||||
|  |  | ||||||
|  |  | ||||||
|  | clean_up 0 | ||||||
		Reference in New Issue
	
	Block a user