Do you have freezers and other electrical equipment at home and worry about whether they'll be all right while you're away on holiday? Do you have a broadband connection with a rarely changing IP address, and a web site that you host with a web space provider? Then you'll be able to set up a "heartbeat" script to check out your home systems. We're doing this to keep an eye on Well House Manor, where we have two separate power feeds and want to be alerted if either of them trips.
Sample Scheme (what we have done - there are lots of alternatives at some stages):
a) Set up your home modem / router to point to a local machine that's permanently running, and is running Apache httpd and PHP. We have a Mac mini that fulfils this role. On this machine write a very simple web page that returns a status, such as:
<?php print(`uptime`); ?>
b) Set up a script of your main web site (remote from home) that runs this script, analyses the results, and emails you if there's a problem. We have a sample of such a script
here ... ours is slightly more sophisticated in that is also looks at the server loading and reports back if there are overloading issues too
c) Set up a regular timed (crontab) job on your web site to run the 'heartbeat' script at an appropriate frequency. We have the following line in our 'crontab' file:
9,24,39,54 * * * * /usr/local/bin/php /home/welho/private/zzppxping.php
Here is my slightly longer explanation of the various things this script will catch, taken from the comments I have added so that I can remember what I did when I come to look at the script in the future ...
/* Heartbeat script - to run regularly on crontab and gather server
status from Well House Manor. This script runs on a remote server and
will email us if:
a) The Router at Well House Manor is not responding
e.g. changed IP, power failure
b) The Manor Web server is down
e.g. switched off / disconnected / has no power
c) Software issue on web server
i.e. the httpd daemon is not running or is overloaded */
I should now write an equal and opposite script that has our local server checking that the web space provide system is live and responding ;-)
(written 2009-04-29, updated 2009-04-30)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
G996 - Well House Consultants - Newsletter Scripts [1001] .pdf files - upload via PHP, store in MySQL, retrieve - (2006-12-19)
[1066] Final, Finally and Finalize - three special words in Java - (2007-02-05)
[1123] mysqldump and mysqlrestore - (2007-03-30)
[1217] What are factory and singleton classes? - (2007-06-04)
[1321] Resetting session based tests in PHP - (2007-08-26)
[1387] Error logging to file not browser in PHP - (2007-10-11)
[1487] Efficient PHP applications - framework and example - (2007-12-28)
[1505] Script to present commonly used images - PHP - (2008-01-13)
[1601] Replacing the last comma with an and - (2008-04-04)
[1665] Factory method example - Perl - (2008-06-04)
[1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
[1813] Ajax - going Asyncronous and what it means - (2008-09-28)
[1954] mod_rewrite for newcomers - (2008-12-20)
[2046] Finding variations on a surname - (2009-02-17)
[2259] Grouping rows for a summary report - MySQL and PHP - (2009-06-27)
[2360] Error Handling in Lua with assert and pcall - (2009-08-13)
[2433] Controlling, supressing, enabling PHP error messages - (2009-10-02)
[2539] Changing Images - (2009-12-17)
[3179] Oops - I typed ci not vi, and have lost my file ... - (2011-02-21)
A166 - Web Application Deployment - Linux Utilities [63] Almost like old times - (2004-09-26)
[71] Comparators in Linux and Unix - (2004-10-03)
[1361] Korn shell course - (2007-09-22)
[1366] awk - a powerful data extraction and manipulation tool - (2007-09-25)
[1690] Conversion of c/r line ends to l/f line ends - (2008-06-28)
[2320] Helping new arrivals find out about source code examples - (2009-08-03)
[2484] Finding text and what surrounds it - contextual grep - (2009-10-30)
[2638] Finding what has changed - Linux / Unix - (2010-02-17)
[3446] Awk v Perl - (2011-09-18)
[3764] Shell, Awk, Perl of Python? - (2012-06-14)
[3902] Shell - Grep - Sed - Awk - Perl - Python - which to use when? - (2012-10-22)
[4586] Extending your bash shell with aliases, functions and extra commands - (2015-11-28)
[4682] One line scripts - Awk, Perl and Ruby - (2016-05-20)
A164 - Web Application Deployment - Services and Regular Jobs [544] Repeating tasks with crontab - (2005-12-27)
[907] Browser -> httpd -> Tomcat -> MySQL. Restarting. - (2006-10-28)
[1028] Linux / Unix - process priority and nice - (2007-01-10)
[1288] Linux run states, shell special commands, and directory structures - (2007-08-03)
[1553] Automatic startup and shutdown of Tomcat - (2008-02-24)
[1633] Changing a screen saver from a web page (PHP, Perl, OSX) - (2008-05-06)
[1700] FTP server on Fedora Linux - (2008-07-06)
[1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
[1733] memcached - overview, installation, example of use in PHP - (2008-08-02)
[1765] Dialects of English and Unix - (2008-08-21)
[1903] daemons - what is running on my Linux server? - (2008-11-23)
[2182] What Linux run level am I in? - (2009-05-15)
[3011] What are .pid files? - (2010-10-23)
[3143] On time - (2011-01-23)
[3791] The Kernel, Shells and Daemons. Greek Gods in computing - (2012-07-01)
[3792] Managing daemons from a terminal session - (2012-07-01)
[4487] Starting MySQL. ERROR! The server quit without updating PID file - how we fixed it. - (2015-05-06)
Some other Articles
Routing Network Traffic - Proxies, Redirects and DNSVariable scope in Java Servlets and other web applicationsA very easy JSP (Java Server Page)An evening excursion to Devizes and AveburyUsing the internet to remotely check for power failure at home (PHP)Looking for a career change - Physician to Web Site DesignerThroughout the year, around the worldRiverside DevelopmentTown Crier competitonBeware - giving copyright away when you upload a picture - Dogs Trust