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.