diff --git a/startuphealthcheck.sh b/startuphealthcheck.sh new file mode 100644 index 0000000..b8e2d20 --- /dev/null +++ b/startuphealthcheck.sh @@ -0,0 +1,93 @@ +#!/bin/bash +#vars +NF="\e[0m" +FB="\e[1m" +CG="\e[38;5;40m" +CR="\e[38;5;9m" +CY="\033[38;5;226m" +HOST=$(hostnamectl --static) +PUSHOVERAPI="https://api.pushover.net" + +#functions +guardband() { +if [ $? -ne 0 ]; then +echo -e "${CR}Health check - ${FB}FAIL${NF} ${CR}- Services start aborted.${NF}" +PushoverReturnBootError +exit 0 +else +echo -e "${CG}Health check - ${FB}PASS${NF}" +fi +} + +verifyZFS() { +echo -e "${CY}Verify ZFS...${NF}" +systemctl is-active zfs-mount +if [ $? -ne 0 ]; then +echo -e "${CR}${FB}ZFS FAILED${NF}" +return 1 +fi +} + +PushoverReturnBootOK() { +if ! wget --spider "$PUSHOVERAPI" 2>/dev/null; then +echo -e "${CR}Pushover API unreachable - Message will retry.${NF}" +sleep 600 +TITLE="$HOST Boot health check PASS" +APP_TOKEN="apipushoverapptoken" +USER_TOKEN="apipushoverusertoken" +MESSAGE="$HOST has successfully passed all healthchecks after bootup." +curl -s -F "token=$APP_TOKEN" -F "user=$USER_TOKEN" -F "title=$TITLE" -F "message=$MESSAGE" https://api.pushover.net/1/messages.json + if [ $? -ne 0 ]; then + echo -e "${CR}Pushover API still unreachable - Message not sent.${NF}" + fi +else +TITLE="$HOST Boot health check PASS" +APP_TOKEN="apipushoverapptoken" +USER_TOKEN="apipushoverusertoken" +MESSAGE="$HOST has successfully passed all healthchecks after bootup." +curl -s -F "token=$APP_TOKEN" -F "user=$USER_TOKEN" -F "title=$TITLE" -F "message=$MESSAGE" https://api.pushover.net/1/messages.json +fi +} + +PushoverReturnBootError() { +if ! wget --spider "$PUSHOVERAPI" 2>/dev/null; then +echo -e "${CR}Pushover API unreachable - Message will retry.${NF}" +systemctl stop syncthing@root +systemctl stop cronicle +systemctl stop docker.socket +systemctl stop ampinstmgr + if [ "$HOST" = "Delta" ] + then + systemctl stop jellyfin #delta only + fi +systemctl stop rsyncd +sleep 600 +TITLE="$HOST Boot health check FAIL" +APP_TOKEN="apipushoverapptoken" +USER_TOKEN="apipushoverusertoken" +MESSAGE="$HOST has failed a healthcheck after bootup - Services will not be initiated. Manual Intervention Required." +curl -s -F "token=$APP_TOKEN" -F "user=$USER_TOKEN" -F "title=$TITLE" -F "message=$MESSAGE" https://api.pushover.net/1/messages.json + if [ $? -ne 0 ]; then + echo -e "${CR}Pushover API still unreachable - Message not sent.${NF}" + fi +else +TITLE="$HOST Boot health check FAIL" +APP_TOKEN="apipushoverapptoken" +USER_TOKEN="apipushoverusertoken" +MESSAGE="$HOST has failed a healthcheck after bootup - Services will not be initiated. Manual Intervention Required." +curl -s -F "token=$APP_TOKEN" -F "user=$USER_TOKEN" -F "title=$TITLE" -F "message=$MESSAGE" https://api.pushover.net/1/messages.json +systemctl stop syncthing@root +systemctl stop cronicle +systemctl stop docker.socket +systemctl stop ampinstmgr + if [ "$HOST" = "Delta" ] + then + systemctl stop jellyfin #delta only + fi +systemctl stop rsyncd +fi +} +sleep 60 +verifyZFS +guardband +PushoverReturnBootOK \ No newline at end of file