docs: def mainloop(self):
          """ The main loop.
          """
          self._validate_config()
          config.engine.load_config()
  
          # Defaults for process control paths
          if not self.options.no_fork and not self.options.guard_file:
              self.options.guard_file = os.path.join(config.config_dir, "run/pyrotorque")
          if not self.options.pid_file:
              self.options.pid_file = os.path.join(config.config_dir, "run/pyrotorque.pid")
  
          # Process control
          if self.options.status or self.options.stop or self.options.restart:
              if self.options.pid_file and os.path.exists(self.options.pid_file):
                  running, pid = osmagic.check_process(self.options.pid_file)
              else:
                  running, pid = False, 0
  
              if self.options.stop or self.options.restart:
                  if running:
                      os.kill(pid, signal.SIGTERM)
  
                      # Wait for termination (max. 10 secs)
                      for _ in range(100):
                          running, _ = osmagic.check_process(self.options.pid_file)
                          if not running:
                              break
                          time.sleep(.1)
  
                      self.LOG.info("Process #%d stopped." % (pid))
                  elif pid:
                      self.LOG.info("Process #%d NOT running anymore." % (pid))
                  else:
                      self.LOG.info("No pid file '%s'" % (self.options.pid_file or "<N/A>"))
              else:
                  self.LOG.info("Process #%d %s running." % (pid, "UP and" if running else "NOT"))
  
              if self.options.restart:
                  if self.options.pid_file:
                      running, pid = osmagic.check_process(self.options.pid_file)
                      if running:
                          self.return_code = error.EX_TEMPFAIL
                          return
              else:
                  self.return_code = error.EX_OK if running else error.EX_UNAVAILABLE
                  return
  
          # Check for guard file and running daemon, abort if not OK
          try:
              osmagic.guard(self.options.pid_file, self.options.guard_file)
          except EnvironmentError as exc:
              self.LOG.debug(str(exc))
              self.return_code = error.EX_TEMPFAIL
              return
  
          # Detach, if not disabled via option
          if not self.options.no_fork: # or getattr(sys.stdin, "isatty", lambda: False)():
              osmagic.daemonize(pidfile=self.options.pid_file, logfile=logutil.get_logfile())
              time.sleep(.05) # let things settle a little
          signal.signal(signal.SIGTERM, _raise_interrupt)
  
          # Set up services
          from apscheduler.scheduler import Scheduler
          self.sched = Scheduler(config.torque)
  
          self._init_wsgi_server()
  
          # Run services
          self.sched.start()
          try:
              self._add_jobs()
              # TODO: daemonize here, or before the scheduler starts?
              self._run_forever()
          finally:
              self.sched.shutdown()
              if self.wsgi_server:
                  self.wsgi_server.task_dispatcher.shutdown()
                  self.wsgi_server = None
  
              if self.options.pid_file:
                  try:
                      os.remove(self.options.pid_file)
                  except EnvironmentError as exc:
                      self.LOG.warn("Failed to remove pid file '%s' (%s)" % (self.options.pid_file, exc))
                      self.return_code = error.EX_IOERR