Scheduling a daily Cron task in Debian to check external IP

Distributed Systems with Node.js, O'Reilly 2020, has been published!

I've been using DynDNS services for a while to have a human-readable address to access my home services. But recently, I realized how much cooler it would be to point a domain or sub-domain to my home network. To do this though, I would need a relatively non-volatile external IP address for my home network. I'm not sure what the frequency of which my ISP changes this, so I figured it would be a good idea to start logging this data.

You will need a few things for this to work. The first is a site which displays the IP address of the machine requesting the page. I built one for this, available at, but you may want to use a service with a guaranteed uptime, or host one yourself. Here's the PHP sourcecode for the script (it's super simple):

if (isset($_GET['newline'])) {
    echo "n";

You will also need to create a script to grab that external IP address, and put it in the location to have Cron execute it. If you would like to run this every day, place the script in /etc/cron/daily. Here is a script I created for the task (it requires cURL to be installed, although the same could be achieved with wget):

date +"%Y-%m-%d: " | tr -d 'n' >> /var/log/external-ip.log
curl -s >> /var/log/external-ip.log

You may also want to create the log file and give it writeable permissions (if you want other users to be able to run the process that is), although it should be created automatically by bash.

Whenever you want to view the status of the IP address changes (e.g. in a couple weeks), you can ran the following command:

cat /var/log/external-ip.log

Example output:

Thomas Hunter II Avatar

Thomas has contributed to dozens of enterprise Node.js services and has worked for a company dedicated to securing Node.js. He has spoken at several conferences on Node.js and JavaScript, is an O'Reilly published author, and is an organizer of NodeSchool SF.