Depending on our requirements we have used one or more of the following methods to ensure that Schedule objects are active as required. We not only check for Active but also ensure that it is not in a Stopped status (1563).
1. Time Events that execute continuously. They, as you suggest, read a Variable with the Schedule object names that it is to monitor. The Validity keyword is the object name and the Value is the Notification addressing for exceptions. All checks are made twice with a couple of second delay to account for a Turnaround to handle possible a false positive.
2. The Process tab of the Schedule activates a Time Event that monitors the Schedule that activated it. The Event also has logic to know when it should end due to Turnaround that was passed at activation from the JSCH_PERIOD and JSCH_PERIOD_TA attributes.
3. Cockpit Monitor that executes continuously. It displays the counts of various schedules that are to be active and are used by our operations staff as part of their monitoring duties.
4. Properties/Result on Schedule tasks to execute a Notification should it fail to properly activate. We have a few Schedules that are not continuously active and are themselves tasks on a Schedule.