code: def _scan_and_execute_jobs(self):
      while True:
          try:
              for next_executable_job in iter(
                  lambda: self._evadb.catalog().get_next_executable_job(
                      only_past_jobs=True
                  ),
                  None,
              ):
                  execution_time = datetime.datetime.now()
  
                  # insert a job history record to mark start of this execution
                  self._evadb.catalog().insert_job_history_catalog_entry(
                      next_executable_job.row_id,
                      next_executable_job.name,
                      execution_time,
                      None,
                  )
  
                  # execute the queries of the job
                  execution_results = [
                      execute_query(self._evadb, query)
                      for query in next_executable_job.queries
                  ]
                  logger.debug(
                      f"Exection result for job: {next_executable_job.name} results: {execution_results}"
                  )
  
                  # update the next trigger time for this job
                  self._update_next_schedule_run(next_executable_job)
  
                  # update the previosly inserted job history record with endtime
                  self._evadb.catalog().update_job_history_end_time(
                      next_executable_job.row_id,
                      execution_time,
                      datetime.datetime.now(),
                  )
  
              next_executable_job = (
                  self._evadb.catalog().get_next_executable_job(
                      only_past_jobs=False
                  )
              )
  
              sleep_time = self._get_sleep_time(next_executable_job)
              if sleep_time > 0:
                  logger.debug(
                      f"Job scheduler process sleeping for {sleep_time} seconds"
                  )
                  time.sleep(sleep_time)
          except Exception as e:
              logger.error(
                  f"Got an exception in job scheduler: {str(e)}"
              )
              time.sleep(self.poll_interval_seconds * 0.2)
  
file_path: evadb/evadb/utils/job_scheduler.py
imports: import datetime
  import sys
  import time
  from evadb.catalog.models.utils import JobCatalogEntry
  from evadb.database import EvaDBDatabase
  from evadb.server.command_handler import execute_query
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 4 for calling the JobScheduler obj's underlying member method code with example usage: obj._scan_and_execute_jobs() without return types