47 lines
1.3 KiB
Bash
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 |