Scheduler running fine in production, then all of a sudden it shut down. Clearly DB might have been offline for a bit (web apps never missed a beat so it was transient).
Log reported...
[2019-11-25 07:59:14,907: INFO/ercscheduler] Scheduler has been shut down
[2019-11-25 07:59:14,908: DEBUG/ercscheduler] Looking for jobs to run
[2019-11-25 07:59:14,909: WARNING/ercscheduler] Error getting due jobs from job store 'default': (psycopg2.OperationalError) could not connect to server: Network is unreachable
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 6432?
(Background on this error at: http://sqlalche.me/e/e3q8)
[2019-11-25 07:59:14,909: DEBUG/ercscheduler] Next wakeup is due at 2019-11-25 13:59:24.908318+00:00 (in 10.000000 seconds)
[2019-11-25 07:59:14,909: INFO/ercscheduler] listener closed
[2019-11-25 07:59:14,909: INFO/ercscheduler] server has terminated
[2019-11-25 08:00:10,747: INFO/ercscheduler] Adding job tentatively -- it will be properly scheduled when the scheduler starts
[2019-11-25 08:00:10,797: INFO/ercscheduler] Adding job tentatively -- it will be properly scheduled when the scheduler starts
[2019-11-26 15:27:48,392: INFO/ercscheduler] Adding job tentatively -- it will be properly scheduled when the scheduler starts
[2019-11-26 15:27:48,392: INFO/ercscheduler] Adding job tentatively -- it will be properly scheduled when the scheduler starts
How do I make the scheduler more fault tolerant? I have to restart the daemon again to get it going.
I found something very similar to your issue on the APScheduler Github repo. https://github.com/agronholm/apscheduler/issues/109
version 3.3.All you have to do is upgrade to at least to 3.3.
If you would like to alter the default 10 seconds interval then you have to set the jobstore_retry_interval when you create the scheduler instance.
def monkey_patched_process_jobs(self):
# You have alter the way job processing done in this function.
pass
# replacing the function with the patched one
BackgroundScheduler._process_jobs = monkey_patched_process_jobs
scheduler = BackgroundScheduler()
Keep in mind that this is not ideal, i would only do monkey patching if i am unable to upgrade due to breaking changes.
This is a snippet from the APScheduler Git repo
try:
due_jobs = jobstore.get_due_jobs(now)
except Exception as e:
# Schedule a wakeup at least in jobstore_retry_interval seconds
self._logger.warning('Error getting due jobs from job store %r: %s',
jobstore_alias, e)
retry_wakeup_time = now + timedelta(seconds=self.jobstore_retry_interval)
if not next_wakeup_time or next_wakeup_time > retry_wakeup_time:
next_wakeup_time = retry_wakeup_time
continue
self.jobstore_retry_interval is set in the following manner:
self.jobstore_retry_interval = float(config.pop('jobstore_retry_interval', 10))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With