You can write your own script to achieve this goal, where you implement a light-weight http client in python-twisted... but why bother?
There is a thing called reinventing the wheel.
So what do we need?
- curl;
- logrotate;
- mutt;
- A list of urls;
- A log file to record visits by curl;
- A script called site-checker, which one puts in the
/etc/cron.hourly/
andchmod 770 /etc/cron.hourly/site-checker
:
#!/bin/bash #set -e -x FILELOC=/home/user/bin/websites.list LOGFILE=/home/user/bin/log/site-checker.log WEBSITES=$(cat $FILELOC | xargs) UDATE=$(date -u) EMAILADDR=user@nowhere.com for w in $WEBSITES do echo "==Fetched $w on $UDATE==" >> $LOGFILE curl -sf $w || echo "Warning: $w is down on $UDATE" | mutt -s "[website down] $UDATE $w" $EMAILADDR $ done
websites.list
would contain something like this:www.microsoft.com www.google.com www.sap.com www.oracle.com
For mutt to send e-mails you either need to setup a MTA (mail-transfer agent) or add a
.muttrc
file to your $HOME, containing something like this:set smtp_url="smtp://user@smtp.woohoo.com" set smtp_pass="tuff2guess"
You also have to prevent your
site-checker.log
from growing too big with logrotate.Type this in your bash shell:
echo -e "/home/user/bin/log/*.log {\n\ daily\n\ missingok\n\ size=100k\n\ rotate 5\n\ }" > /etc/logrotate.d/user-custom\
As with every single script on this blog, you must adapt the script to your own needs.
Happy hacking!
Update 21-dec-2010:
#!/bin/bash FILELOC=/home/user/bin/websites.list PEOPLELOC=/home/user/bin/people.list LOGFILE=/home/user/bin/site-checker.log WEBSITES=$(cat $FILELOC | xargs) UDATE=$(date -u) mail () { read message domainname=$1 for addr in $(cat $PEOPLELOC | xargs) do echo $message | mutt $addr -s "[website down] $UDATE $domainname" 2> /dev/null done } for w in $WEBSITES do touch $LOGFILE echo "==Fetched $w on $UDATE==" >> $LOGFILE curl -sf $w || echo "Warning: $w is down on $UDATE" | mail $w done
No comments:
Post a Comment
Please help to keep this blog clean. Don't litter with spam.