#!/usr/bin/env bash # Copyright (C) 2021 by LHProjects # # 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