Great stuff!
Optimally you might consider packaging this as a plugin to avoid having to have a separate executable or script: Beginner's Guide to Creating Discourse Plugins Part 1: Creating 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