Great stuff!
Optimally you might consider packaging this as a plugin to avoid having to have a separate executable or script: Developing Discourse Plugins - Part 1 - Create a basic plugin
Architecturally you might also consider using out-of-the-box Discourse Events to capture the moment when you’d like to send a user a message - this would avoid scheduling anything.
But if you need it Discourse also has a great scheduler and there are plenty of plugins that create bespoke ‘Jobs’. Scheduling jobs from a plugin - #2 by simon