Thelma

On 6/27/23 13:23, Neil Bothwick wrote:
On Tue, 27 Jun 2023 11:48:16 -0600, the...@sys-concept.com wrote:

On 6/27/23 11:04, Neil Bothwick wrote:
On Tue, 27 Jun 2023 10:34:22 -0600, the...@sys-concept.com wrote:
I run this little script to notify me when the IP changes.  However
at time to time the file: "old_ip.txt" is being populated with an
empty line "no IP address"

What could be causing it?


#!/bin/bash

# Replace "YOUR_EMAIL" with your actual email address
EMAIL="your_em...@gmail.com"

# File to store the old IP address
IP_FILE="/home/fd/business/scripts/old_ip.txt"

# Read the old IP address from the file
OLD_IP=$(cat "$IP_FILE")

# Function to retrieve the IP address
get_ip_address() {
       local ip_address
       ip_address=$(curl -s https://ifconfig.me/ip)
       echo "$ip_address"
}

# Query the API to get the current IP address
NEW_IP=$(curl -s https://api.ipify.org)

I found this site very slow to respond. It could be timing out with an
empty result. OTOH the URL used in the get_ip_address function is
rapid, but you don't call that function.

sleep 2

Yes, I notice it, it take upwards 10sec to get an IP and sometimes I
get a timeout, I increases "sleep 15" hopefully it will help.

It won't because the curl command is running synchronously. All
increasing the sleep does is make you wait longer after it fails. Why not
simply switch to the other service that seems to work more reliably?

I think this is better version:
#!/bin/bash

# Replace "YOUR_EMAIL" with your actual email address
EMAIL="your_em...@gmail.com"

# File to store the old IP address
IP_FILE="/home/fd/business/scripts/old_ip.txt"

# Read the old IP address from the file
OLD_IP=$(cat "$IP_FILE")

# Function to retrieve the IP address
get_ip_address() {
    local ip_address
    ip_address=$(wget -qO- ipinfo.io/ip)
    echo "$ip_address"
}

# Query the API to get the current IP address
NEW_IP=$(get_ip_address)

# Retry if the IP address is empty
retry_count=0
while [[ -z "$NEW_IP" && $retry_count -lt 3 ]]; do
    sleep 1
    NEW_IP=$(get_ip_address)
    ((retry_count++))
done

# Compare the new IP address with the old one
if [[ "$NEW_IP" != "$OLD_IP" ]]; then
    echo "Your IP address has changed to $NEW_IP"

    # Send an email notification
    echo "New IP address: $NEW_IP" | mailto -s "IP address change" $EMAIL

    # Update the old IP address in the file
    echo -n "$NEW_IP" >| "$IP_FILE"
else
    echo "Your IP address is still $OLD_IP"
fi


Reply via email to