scripts/monitor_ip.sh

47 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# Copyright (C) 2021 by LHProjects <copyright@lhpmail.us>
#
# Permission is granted to use, copy, modify, and/or distribute this work for any purpose with or without fee. This work is offered as-is, with absolutely no warranty whatsoever. The author is not responsible for any damages that result from using this work.
#
#
# Monitors host public IP, when it differs, restart services.
#
#
# I wrote this script for services like Nginx, which caches hostnames and fall out of sync when hostname IP changes.
# This is problematic when you have edge servers connecting to backends with hostnames that change
# ips frequently.
# Define variables
CONF_NAME="monitor_ip.conf"
POSSIBLE_PATHS="./ /etc"
CACHE_IP_FILE=/tmp/monitor_ip.cache
PUBLIC_IP=$(curl --silent https://api.ipify.org/)
FOUND=false
IFS=" "
for P in $POSSIBLE_PATHS; do
if test -f "$P"/$CONF_NAME; then
FOUND=true
source "$P"/$CONF_NAME
fi
done
if [ $FOUND = false ]; then
echo "Configuration file not found in '$POSSIBLE_PATHS'"
exit 1
fi
# Check if we have cache IP
if test -f $CACHE_IP_FILE; then
CACHE_IP=$(cat $CACHE_IP_FILE)
if [ "$PUBLIC_IP" != "$CACHE_IP" ]; then
for S in $SERVICES; do
systemctl restart "$S"
done
fi
else
echo "$PUBLIC_IP" > $CACHE_IP_FILE
fi
exit 0