From b27b0aa937223fa06f8ecd6eb0152a5ae95ee500 Mon Sep 17 00:00:00 2001 From: Christoph Date: Thu, 5 Mar 2020 00:19:45 +0100 Subject: [PATCH] check-connectivity.sh: fix some minor bugs. --- check-connectivity.sh | 163 +++++++++++++++++++++++++++---- conf/check-connectivity.conf.BAK | 33 +++++++ 2 files changed, 177 insertions(+), 19 deletions(-) create mode 100644 conf/check-connectivity.conf.BAK diff --git a/check-connectivity.sh b/check-connectivity.sh index de82626..c255999 100755 --- a/check-connectivity.sh +++ b/check-connectivity.sh @@ -114,9 +114,14 @@ echo_failed(){ echo -e "\033[75G[ \033[1;31mfailed\033[m ]" fi } +echo_warn() { + if $terminal ; then + echo -e "\033[75G[ \033[33m\033[1mwarn\033[m ]" + fi +} echo_skipped() { if $terminal ; then - echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" + echo -e "\033[75G[ \033[37m\033[1mskipped\033[m ]" fi } @@ -155,6 +160,19 @@ online() { } +reboot_system() { + + content_type='Content-Type: text/plain;\n charset="utf-8"' + datum="$(date +"%d.%m.%Y")" + from_address="root@$(hostname --long)" + + echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:[Connectivity Error] $datum - Reboot System\n$*" | /usr/sbin/sendmail -F "Connectivity Check" -f $from_address $ADMIN_EMAIL + + sleep 10 + /sbin/reboot -f + +} + # ---------- # - Jobhandling # ---------- @@ -212,6 +230,7 @@ fi # - DEFAULT_IPV6_PRESENT=true DEFAULT_CHECK_HOSTS="www.oopen.de www.google.de www.heise.de www.debian.org" +DEFAULT_ADMIN_EMAIL="argus@oopen.de" echononl "Load Configurations from file '$(basename "$conf_file")'." if [[ -f "$conf_file" ]]; then @@ -219,12 +238,24 @@ if [[ -f "$conf_file" ]]; then echo_ok else echo_skipped - warn "No configuration file found. Loading script default values.." + msg="No configuration file found. Script default values where loaded.." + if $terminal ; then + echo "" + echo -e " [ \033[33m\033[1mWarn\033[m ] $msg" + echo "" + fi + #if [[ -z "$msg_warn" ]]; then + # msg_warn="$msg" + #else + # msg_warn="$msg_warn + # $msg" + #fi fi [[ -z "$IPV6_PRESENT" ]] && IPV6_PRESENT="$DEFAULT_IPV6_PRESENT" [[ -z "$DNS_CHECK_HOSTS" ]] && DNS_CHECK_HOSTS="$DEFAULT_CHECK_HOSTS" [[ -z "$HTTPS_CHECK_HOSTS" ]] && HTTPS_CHECK_HOSTS="$DEFAULT_CHECK_HOSTS" +[[ -z "$ADMIN_EMAIL" ]] && ADMIN_EMAIL="$DEFAULT_ADMIN_EMAIL" blank_line @@ -240,7 +271,13 @@ else fi if $LINK_UP ; then - info 'Machine has at least one interface with physical link is up.' + msg="Machine has at least one interface with physical link is up." + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + $msg" + fi else error 'Machine is OFFLINE' if [[ -f "$RESTART_CHECK_FILE" ]] ; then @@ -253,7 +290,7 @@ else if [[ $_delta -gt 3900 ]] ; then touch "$RESTART_CHECK_FILE" else - /sbin/reboot -f + reboot_system "No interface with physical link is up - Machine is OFFLINE." fi else touch "$RESTART_CHECK_FILE" @@ -283,7 +320,14 @@ echononl "Check if IPv4 default route is set.." if [[ ${#DEFAULT_GW_4_ARR[@]} -gt 0 ]] ; then echo_ok if [[ ${#DEFAULT_GW_4_ARR[@]} -eq 1 ]] ; then - info "Default IPv4 Gateway(s): ${DEFAULT_GW_4_ARR[@]}" + msg="Default IPv4 Gateway(s): ${DEFAULT_GW_4_ARR[@]}" + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi else msg="Default IPv4 Gateway(s): ${DEFAULT_GW_4_ARR[0]}" for index in "${!DEFAULT_GW_4_ARR[@]}"; do @@ -291,13 +335,19 @@ if [[ ${#DEFAULT_GW_4_ARR[@]} -gt 0 ]] ; then msg="$msg ${DEFAULT_GW_4_ARR[$index]}" done - info "$msg" + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi fi else echo_failed PROBLEM_FOUND=true - error "No default route IPV4is set." + error "No default route IPV4 is set." if [[ -f "$RESTART_CHECK_FILE" ]] ; then @@ -309,7 +359,7 @@ else if [[ $_delta -gt 3900 ]] ; then touch "$RESTART_CHECK_FILE" else - /sbin/reboot -f + reboot_system "No default route IPv4 is set." fi else touch "$RESTART_CHECK_FILE" @@ -332,7 +382,14 @@ if $IPV6_PRESENT ; then if [[ ${#DEFAULT_GW_6_ARR[@]} -gt 0 ]] ; then echo_ok if [[ ${#DEFAULT_GW_6_ARR[@]} -eq 1 ]] ; then - info "Default IPv6 Gateway(s): ${DEFAULT_GW_6_ARR[@]}" + msg="Default IPv6 Gateway(s): ${DEFAULT_GW_6_ARR[@]}" + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi else msg="Default IPv6 Gateway(s): ${DEFAULT_GW_6_ARR[0]}" for index in "${!DEFAULT_GW_6_ARR[@]}"; do @@ -340,12 +397,27 @@ if $IPV6_PRESENT ; then msg="$msg ${DEFAULT_GW_6_ARR[$index]}" done - info "$msg" + + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi + fi else - echo_failed + echo_warn - warn "No default route IPv6 is set." + msg="No default route IPv6 is set." + if [[ -z "$msg_warn" ]]; then + msg_warn="$msg" + else + msg_warn="$msg_warn + + $msg" + fi fi fi @@ -365,7 +437,15 @@ if [[ -n "$FIRST_NS" ]] ; then echo_ok FOUND_NS_PROBLEM=false - info "Found nameserver \033[1m$FIRST_NS\033[m at '/etc/resolv.conf'." + msg="Found nameserver \033[1m$FIRST_NS\033[m at '/etc/resolv.conf'." + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi + else echo_failed error "No nameserverentry at '/etc/resolv.conf' found." @@ -402,7 +482,7 @@ if ! $FOUND_NS_PROBLEM ; then if [[ $_delta -gt 3900 ]] ; then touch "$RESTART_CHECK_FILE" else - /sbin/reboot -f + reboot_system "First nameserver located at /etc/resolv.conf does not work properly." fi else touch "$RESTART_CHECK_FILE" @@ -411,11 +491,26 @@ if ! $FOUND_NS_PROBLEM ; then else echo_ok - info "Nameserver works as expected." + msg="Nameserver works as expected." + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi + fi else echo_skipped - warn "Test was not triggert because of nameserver problems.." + msg="Resolver test was not triggert because of nameserver problems.." + if [[ -z "$msg_warn" ]]; then + msg_warn="$msg" + else + msg_warn="$msg_warn + + $msg" + fi fi @@ -423,7 +518,11 @@ fi # Website reachable? # --- -FOUND_CHECK_HOST_PROBLEM=true +if ! $FOUND_NS_PROBLEM ; then + FOUND_CHECK_HOST_PROBLEM=true +else + FOUND_CHECK_HOST_PROBLEM=false +fi # Check if some websites reachable.. # @@ -446,7 +545,14 @@ for _host in $HTTPS_CHECK_HOSTS ; do esac else echo_skipped - warn "Test was not triggert because of nameserver problems.." + msg="Website accessibility test was not triggert because of nameserver problems.." + if [[ -z "$msg_warn" ]]; then + msg_warn="$msg" + else + msg_warn="$msg_warn + + $msg" + fi break fi @@ -466,12 +572,31 @@ if $FOUND_CHECK_HOST_PROBLEM ; then if [[ $_delta -gt 3900 ]] ; then touch "$RESTART_CHECK_FILE" else - /sbin/reboot -f + reboot_system "No website could be reached." fi else touch "$RESTART_CHECK_FILE" fi clean_up 1 +else + if ! $FOUND_NS_PROBLEM ; then + msg="Extern Websites are reachable." + if [[ -z "$msg_info" ]]; then + msg_info="$msg" + else + msg_info="$msg_info + + $msg" + fi + fi +fi + +if [[ -n "$msg_info" ]]; then + info "$msg_info" +fi + +if [[ -n "$msg_warn" ]]; then + warn "$msg_warn" fi diff --git a/conf/check-connectivity.conf.BAK b/conf/check-connectivity.conf.BAK new file mode 100644 index 0000000..5b8a50f --- /dev/null +++ b/conf/check-connectivity.conf.BAK @@ -0,0 +1,33 @@ +# ------------------------------------------- +# - Settings for script check-connectivity.sh +# ------------------------------------------- + +# - IPV6_PRESENT +# - +# - Possible values: true/false +# - +# - Example: +# - IPV6_PRESENT=false +# - +# - Default value: true +# - +#IPV6_PRESENT=true + + +# - DNS_CHECK_HOSTS +# - +# - Blank sepatated list of hostnames checked by lokal nameservice simply +# - for their ip-addresses +# - +# - Defaults to: DNS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de" +# - +#DNS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de www.debian.org" + + +# - HTTPS_CHECK_HOSTS +# - +# - Blank sepatated list of websites which will be checked for accessibility +# - +# - Defaults to: HTTPS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de" +# - +#HTTPS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de www.debian.org"