There is nothing special about using cron in options # 1 and # 2, I don’t know which application you are using, but you may not need to give users the ability to schedule the exact minute. Even then, it probably won't be a problem if your script marks the reminder status as “pending” or such, and any new script instances send only those that are not “waiting” or “sent”.
You can use Hudson or a similar application that can help with script management and allow you to monitor for crashes, etc. It can even send notifications when there are crashes. It supports native java-based cron system.
If the application really gets big, you might want to offload this process to a separate server from your web server. You can also look at third-party mail sending tools if you are not already using an external SMTP service and see what integration tools they may have. It should also increase delivery speed, etc.
source share