I put my WRT54G into a noisy electrical environment, and it seems to cause the wifi to fade out a couple times a week, sometimes permanently. (I did this after using a USB adapter on Windows proved too unstable.)
After some experimentation, this script below seems to do a reasonable job of keeping it up. Save it, and put it into the crontab. (You have to install the crond package.) The gateway is at 192.168.1.254.
#! /bin/sh
# Checks if the wifi conn is up. If not, it tries to restart
# the wifi. If that fails, then reboot.
if ping -c 1 192.168.1.254 > /dev/null
then
echo nothing > /dev/null
else
ifdown wifi
ifup wifi
killall wifi
wifi
/etc/init.d/S41wpa
sleep 30
if ping -c 192.168.1.254 > /dev/null
then
echo nothing > /dev/null
else
date >> /reboot.log
reboot
fi
fi
(Note that the date in reboot log will be the same, because the clock is not set right after booting.)
If you wish to comment, post this article on reddit or hacker news.