I did this a while back and it worked. All it did was check for the birthday on the first request of the day (server time) and if there were birthdays, it sent the email/pm (can't remember).
It worked great!
I used an application variable to remember the last time it had run but to prevent a double run if the app pool was restarted, I also posted the update to a PM box... so the script would look at the date, then the application... then the PM box, if no PM found, it would run the script.
(I was trying to avoid the need for a new field or table in the database, that's why I used the PM post for reference.)
I have it on a couple of slow boards and it hasn't given me any trouble. The only trouble would be if the board was so slow that it received zero traffic, well it wouldn't run.
That said, you could put any script like this in the common file and then a site uptime monitor, if you had one, would trigger it no matter which page in the site was called.
This was so long ago... I'm not sure I could answer any questions so... use it at your own risk. ;)