195 lines
5.4 KiB
PHP
Executable File
195 lines
5.4 KiB
PHP
Executable File
|
|
VERS='4.8.6-07042023'
|
|
|
|
noheader=' service status-check nightlyrephp7.3-fpm,new backup report check checkcerts gitea update-nodes copynpmcerts singleservercheck update-dyndns '
|
|
CERT_DAEMON='/snap/bin/certbot'
|
|
NM_FOLDER=/opt/idssys/nodemgmt
|
|
NM_SCRIPT=${NM_FOLDER}/nodemgmt-scripts.sh
|
|
NM_TMPFOLDER=${NM_FOLDER}/.tmp
|
|
NM_LOGFOLDER=${NM_FOLDER}/logs
|
|
NM_LOGFILE=${NM_LOGFOLDER}/logfile
|
|
|
|
RENOTIFY=1800
|
|
|
|
[ ! -d ${NM_TMPFOLDER} ] && mkdir ${NM_TMPFOLDER}
|
|
[ ! -d ${NM_LOGFOLDER} ] && mkdir ${NM_LOGFOLDER}
|
|
|
|
declare -i errtime
|
|
|
|
NM_SRVCOPT=(start stop restart reload enable disable)
|
|
|
|
if [ -f ${NM_FOLDER}/defaults.local.inc ]; then
|
|
declare -A NM_HOSTS
|
|
declare -A NM_SERVICES_CHECK
|
|
declare -A NM_DOCKERS_CHECK
|
|
declare -A NM_REPL_CHECK
|
|
declare -A NM_REPL_NGINX_PATHS
|
|
declare -A NM_HOSTNAMES
|
|
declare -A NM_NODETYPES
|
|
declare -A NM_SERVICE_DESC
|
|
declare -A NM_DOCKER_DESC
|
|
declare -A NM_DOCKER_COMPOSE_LOC
|
|
declare -A NM_REPL_CHECK_LOC
|
|
declare -A NM_REPL_DESC
|
|
declare -A NM_SINGLESRVR_SERVICES
|
|
declare -A NM_SINGLESRVR_DOCKERS
|
|
declare -A NM_SINGLESRVR_IP
|
|
|
|
source ${NM_FOLDER}/defaults.local.inc
|
|
|
|
IFS=,
|
|
LOCAL_SERVICES=(${LOCAL_SERVICES})
|
|
unset IFS
|
|
|
|
declare -a NODE_TYPES
|
|
# for k in "${!NM_NODETYPES[@]}"; do
|
|
# echo "${NM_NODETYPES["$k"]} ${k}"
|
|
# done | sort -f | while read desc nmtype; do
|
|
# NODE_TYPES+=("${nmtype}")
|
|
# # echo "${nmtype} - $desc"
|
|
# done
|
|
|
|
# for k in "${!NM_NODETYPES[@]}"; do echo "${NM_NODETYPES["$k"]} ${k}"; done | sort -f | while read desc nmtype; do echo ${nmtype}; done
|
|
|
|
IFS=$'\n' sorted=($(for k in "${!NM_NODETYPES[@]}"; do echo "${NM_NODETYPES["$k"]} ${k}"; done | sort -f | while read desc nmtype; do eval ${nmtype}; done)); unset IFS
|
|
|
|
printf "[%s]\n" "${sorted[@]}"
|
|
|
|
for ntype in "${NODE_TYPES[@]}"; do
|
|
arr ${ntype}_HOSTS
|
|
arr ${ntype}_SERVICES_CHECK
|
|
arr ${ntype}_DOCKERS_CHECK
|
|
arr ${ntype}_REPL_CHECK
|
|
arr ${ntype}_SINGLESRVR_SERVICES
|
|
arr ${ntype}_SINGLESRVR_DOCKERS
|
|
arr ${ntype}_SINGLESRVR_IP
|
|
|
|
IFS=,; var=(${NM_HOSTS[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_HOSTS $value
|
|
done
|
|
|
|
if [ "${NM_SERVICES_CHECK[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_SERVICES_CHECK[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_SERVICES_CHECK $value
|
|
done
|
|
fi
|
|
|
|
if [ "${NM_DOCKERS_CHECK[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_DOCKERS_CHECK[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_DOCKERS_CHECK $value
|
|
done
|
|
fi
|
|
|
|
if [ "${NM_REPL_CHECK[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_REPL_CHECK[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_REPL_CHECK $value
|
|
done
|
|
fi
|
|
|
|
if [ "${NM_SINGLESRVR_SERVICES[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_SINGLESRVR_SERVICES[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_SINGLESRVR_SERVICES $value
|
|
done
|
|
fi
|
|
|
|
if [ "${NM_SINGLESRVR_DOCKERS[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_SINGLESRVR_DOCKERS[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_SINGLESRVR_DOCKERS $value
|
|
done
|
|
fi
|
|
|
|
if [ "${NM_SINGLESRVR_IP[${ntype}]}" != "" ]; then
|
|
IFS=,; var=(${NM_SINGLESRVR_IP[${ntype}]}); unset IFS
|
|
for value in "${var[@]}"; do
|
|
arr_insert ${ntype}_SINGLESRVR_IP $value
|
|
done
|
|
# else
|
|
# declare "${ntype}_SINGLESRVR_IP"=""
|
|
fi
|
|
done
|
|
|
|
fi
|
|
|
|
declare -A NM_SRVCOPTS
|
|
NM_SRVCOPTS['status']='Status'
|
|
NM_SRVCOPTS['start']='Start'
|
|
NM_SRVCOPTS['stop']='Stopp'
|
|
NM_SRVCOPTS['restart']='Restart'
|
|
NM_SRVCOPTS['reload']='Reload'
|
|
NM_SRVCOPTS['enable']='Enabl'
|
|
NM_SRVCOPTS['disable']='Disabl'
|
|
NM_SRVCOPTS['daemon-reload']='Daemon-Reload'
|
|
|
|
declare -A NM_BACKUP_ITEMS
|
|
NM_BACKUP_ITEMS['nginx-settings']=/etc/nginx
|
|
NM_BACKUP_ITEMS['nginx-logs']=/var/log/nginx
|
|
NM_BACKUP_ITEMS['letsencrypt-certs']=/etc/letsencrypt
|
|
NM_BACKUP_ITEMS['webserver-files']=/var/www
|
|
NM_BACKUP_ITEMS['haproxy']=/etc/haproxy
|
|
NM_BACKUP_ITEMS['keepalived']=/etc/keepalived
|
|
NM_BACKUP_ITEMS['fail2ban']=/etc/fail2ban
|
|
# NM_BACKUP_ITEMS[nginx]=/
|
|
|
|
|
|
|
|
|
|
GET-CHECKCERT-DOMAINS(){
|
|
declare -A CHECKCERT_DOMAINS
|
|
IFS=$'\n'
|
|
for LINE in `egrep -v '(^#|^$)' ${NM_FOLDER}/ssl-cert-check/ssldomains`; do
|
|
HOST=${LINE%% *}
|
|
PORT=${LINE#* }
|
|
IFS=" "
|
|
CHECKCERT_DOMAINS[${HOST}]=${PORT}
|
|
done
|
|
unset IFS
|
|
}
|
|
|
|
DISP_HEADER(){
|
|
declare -i cw; declare -i spc1; declare -i c
|
|
if [ "$1" = true ]; then
|
|
clear
|
|
fi
|
|
echo
|
|
echo -e "${idsCL[LightGreen]} NodeMgmt - Node Monitoring & Management${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}"
|
|
DIVIDER . lightGreen
|
|
echo
|
|
}
|
|
|
|
CERT-CHECK(){
|
|
TARGET="mysite.example.net";
|
|
RECIPIENT="hostmaster@mysite.example.net";
|
|
DAYS=7;
|
|
echo "checking if $TARGET expires in less than $DAYS days";
|
|
expirationdate=$(date -d "$(: | openssl s_client -connect $TARGET:443 -servername $TARGET 2>/dev/null \
|
|
| openssl x509 -text \
|
|
| grep 'Not After' \
|
|
|awk '{print $4,$5,$7}')" '+%s');
|
|
in7days=$(($(date +%s) + (86400*$DAYS)));
|
|
if [ $in7days -gt $expirationdate ]; then
|
|
echo "KO - Certificate for $TARGET expires in less than $DAYS days, on $(date -d @$expirationdate '+%Y-%m-%d')" \
|
|
| mail -s "Certificate expiration warning for $TARGET" $RECIPIENT ;
|
|
else
|
|
echo "OK - Certificate expires on $expirationdate";
|
|
fi
|
|
}
|
|
|
|
SENDNOTICE(){
|
|
[ "${PUSHOVER_APP_TOKEN}" != "" ] && PUSH_TO_MOBILE "${2}
|
|
|
|
$(date)" "${1}" ${3} &
|
|
|
|
[ "${EMAIL_NOTICE}" != "" ] && echo -e "${1}\n\n$(date)" | mail -s "${2}" ${EMAIL_NOTICE}
|
|
|
|
}
|
|
|
|
|
|
|
|
|