i use a script, its original author called it gwping. i use an adapted version of it for redundancy in load balancing multiple external links, but im sure you can adapt it to suit your needs.
it can be found here:
http://blog.taragana.com/wp-content/upload/gwping
i am sure there are other methods, and if anyone knows other methods I too am all ears!
Other methods that I have tried have not been so good, likewise the gwping method: qos can be a cause of packet loss, ping (icmp) is one of the lowest in qos, and would be the first dropped over something like a sip call, and can cause your routes to be switched when in fact nothing is wrong with the current link.
i would really like to take advantage of the kernel's ability to detect dead gateways, but my problem is that my isp is dodgy, and not the connection between my servers and modems/routers. the dead gateway detection should be able to tell when the next hop goes down (not the connection leaving the ISP which is where i have problems 2 to 4 hops away), and will then mark the route as being dead. when having multiple defaults the next in the order should therefore take over.
metrics are not a 'failover or redundancy measure':
"Set the routing metric of the interface to n, default 0. The routing metric is used by the routing protocol. Higher metrics have the effect of making a route less favorable; metrics are counted as addition hops to the destination network or host."