I used to do a fair bit of administering various types of game servers, and I've seen many different solutions:
- Linux shell script (sometimes using
screen) or Windows batch file - the advantage of this solution is that it's simple, and practically anyone can set it up. The downside is that often times TF2 crashes in such a way that it doesn't exit, but it's not really responding either. This won't catch those times.
- Firedaemon - as you've noted, this is a decent app for managing servers, but cost is an issue. It's also not "TF2 aware."
- ServerChecker - This is quite old, but it's still something that works OK. It sometimes has issues if all the servers go down at once and take a while to start back up again, this tends to trip the "timeout" unless it is very large. This can lead to infinitely restarting servers, which is a pain. It's also Windows-only.
- Nemrun is more of a "auto-update" tool, but I think some people run this as a server checking/resetting tool as well. It's python based, but the documentation is somewhat sparse.
I've used all of these to varying levels of success. What you use depends mainly on your setup and what you feel comfortable with.
None of these really worked for the gaming organization I was a part of, so I wrote my own. It's called OpenMAUL SCI. It requires a little bit more setup/technical know-how than the other solutions, but the group I authored it for found it quite useful.
With OpenMAUL SCI, you can monitor and administer your servers via a RCON interface, so if you already use something like HLSW, you can just put in the SCI IP/port and send RCON commands to it just like any other Source-based server. In addition to server monitoring, starting, stopping, etc, it's got a bunch of other features, like map downloads, automatic updates, etc.
I retired from server management some time ago, so I'm not actively maintaining it, although the last checked in version is reasonably documented, stable, and feature-complete.