def run_clockservice(detach=False, loglevel=conf.CELERYBEAT_LOG_LEVEL, logfile=conf.CELERYBEAT_LOG_FILE, pidfile=conf.CELERYBEAT_PID_FILE, umask=0, uid=None, gid=None, working_directory=None, chroot=None, schedule=conf.CELERYBEAT_SCHEDULE_FILENAME, **kwargs): """Starts the celerybeat clock server.""" print("celerybeat %s is starting." % __version__) # Setup logging if not isinstance(loglevel, int): loglevel = conf.LOG_LEVELS[loglevel.upper()] if not detach: logfile = None # log to stderr when not running in the background. # Dump configuration to screen so we have some basic information # when users sends e-mails. print(STARTUP_INFO_FMT % { "conninfo": get_connection_info(), "exchange": conf.AMQP_EXCHANGE, "exchange_type": conf.AMQP_EXCHANGE_TYPE, "consumer_queue": conf.AMQP_CONSUMER_QUEUE, "consumer_rkey": conf.AMQP_CONSUMER_ROUTING_KEY, "publisher_rkey": conf.AMQP_PUBLISHER_ROUTING_KEY, "loglevel": loglevel, "pidfile": pidfile, "schedule": schedule, }) print("celerybeat has started.") arg_start = "manage" in sys.argv[0] and 2 or 1 platform.set_process_title("celerybeat", info=" ".join(sys.argv[arg_start:])) from celery.log import setup_logger, redirect_stdouts_to_logger on_stop = noop if detach: context, on_stop = platform.create_daemon_context(logfile, pidfile, chroot_directory=chroot, working_directory=working_directory, umask=umask) context.open() logger = setup_logger(loglevel, logfile) redirect_stdouts_to_logger(logger, loglevel) platform.set_effective_user(uid, gid) # Run the worker init handler. # (Usually imports task modules and such.) current_loader.on_worker_init() def _run_clock(): logger = setup_logger(loglevel, logfile) clockservice = ClockService(logger=logger, is_detached=detach, schedule_filename=schedule) try: clockservice.start() except Exception, e: emergency_error(logfile, "celerybeat raised exception %s: %s\n%s" % ( e.__class__, e, traceback.format_exc()))
def run_worker(concurrency=DAEMON_CONCURRENCY, detach=False, loglevel=DAEMON_LOG_LEVEL, logfile=DAEMON_LOG_FILE, discard=False, pidfile=DAEMON_PID_FILE, umask=0, uid=None, gid=None, supervised=False, working_directory=None, chroot=None, statistics=None, **kwargs): """Starts the celery worker server.""" # set SIGCLD back to the default SIG_DFL (before python-daemon overrode # it) lets the parent wait() for the terminated child process and stops # the 'OSError: [Errno 10] No child processes' problem. if hasattr(signal, "SIGCLD"): # Make sure the platform supports signals. signal.signal(signal.SIGCLD, signal.SIG_DFL) print("Celery %s is starting." % __version__) if statistics is not None: settings.CELERY_STATISTICS = statistics if not concurrency: concurrency = multiprocessing.cpu_count() if conf.CELERY_BACKEND == "database" \ and settings.DATABASE_ENGINE == "sqlite3" and \ concurrency > 1: import warnings warnings.warn("The sqlite3 database engine doesn't support " "concurrency. We'll be using a single process only.", UserWarning) concurrency = 1 # Setup logging if not isinstance(loglevel, int): loglevel = LOG_LEVELS[loglevel.upper()] if not detach: logfile = None # log to stderr when not running in the background. if discard: discarded_count = discard_all() what = discarded_count > 1 and "messages" or "message" print("discard: Erased %d %s from the queue.\n" % ( discarded_count, what)) # Dump configuration to screen so we have some basic information # when users sends e-mails. print(STARTUP_INFO_FMT % { "vhost": getattr(settings, "AMQP_VHOST", "(default)"), "host": getattr(settings, "AMQP_SERVER", "(default)"), "port": getattr(settings, "AMQP_PORT", "(default)"), "exchange": conf.AMQP_EXCHANGE, "exchange_type": conf.AMQP_EXCHANGE_TYPE, "consumer_queue": conf.AMQP_CONSUMER_QUEUE, "consumer_rkey": conf.AMQP_CONSUMER_ROUTING_KEY, "publisher_rkey": conf.AMQP_PUBLISHER_ROUTING_KEY, "concurrency": concurrency, "loglevel": loglevel, "pidfile": pidfile, "statistics": settings.CELERY_STATISTICS and "ON" or "OFF", }) print("Celery has started.") if detach: if not CAN_DETACH: raise RuntimeError( "This operating system doesn't support detach. ") from daemon import DaemonContext from celery.log import setup_logger, redirect_stdouts_to_logger # Since without stderr any errors will be silently suppressed, # we need to know that we have access to the logfile if logfile: open(logfile, "a").close() pidlock = acquire_pidlock(pidfile) if umask is None: umask = 0 if uid is None: uid = os.geteuid() if gid is None: gid = os.getegid() working_directory = working_directory or os.getcwd() context = DaemonContext(chroot_directory=chroot, working_directory=working_directory, umask=umask, pidfile=pidlock, uid=uid, gid=gid) context.open() logger = setup_logger(loglevel, logfile) redirect_stdouts_to_logger(logger, loglevel) # Run the worker init handler. # (Usually imports task modules and such.) current_loader.on_worker_init() def run_worker(): worker = WorkController(concurrency=concurrency, loglevel=loglevel, logfile=logfile, is_detached=detach) # Install signal handler that restarts celeryd on SIGHUP, # (only on POSIX systems) install_restart_signal_handler(worker) try: worker.start() except Exception, e: emergency_error(logfile, "celeryd raised exception %s: %s\n%s" % ( e.__class__, e, traceback.format_exc()))
def run_worker(concurrency=conf.DAEMON_CONCURRENCY, detach=False, loglevel=conf.DAEMON_LOG_LEVEL, logfile=conf.DAEMON_LOG_FILE, discard=False, pidfile=conf.DAEMON_PID_FILE, umask=0, uid=None, gid=None, working_directory=None, chroot=None, statistics=None, run_clockservice=False, **kwargs): """Starts the celery worker server.""" print("Celery %s is starting." % __version__) if statistics is not None: settings.CELERY_STATISTICS = statistics if not concurrency: concurrency = multiprocessing.cpu_count() if conf.CELERY_BACKEND == "database" \ and settings.DATABASE_ENGINE == "sqlite3" and \ concurrency > 1: import warnings warnings.warn("The sqlite3 database engine doesn't support " "concurrency. We'll be using a single process only.", UserWarning) concurrency = 1 # Setup logging if not isinstance(loglevel, int): loglevel = conf.LOG_LEVELS[loglevel.upper()] if not detach: logfile = None # log to stderr when not running in the background. if discard: discarded_count = discard_all() what = discarded_count > 1 and "messages" or "message" print("discard: Erased %d %s from the queue.\n" % ( discarded_count, what)) # Dump configuration to screen so we have some basic information # when users sends e-mails. print(STARTUP_INFO_FMT % { "conninfo": get_connection_info(), "exchange": conf.AMQP_EXCHANGE, "exchange_type": conf.AMQP_EXCHANGE_TYPE, "consumer_queue": conf.AMQP_CONSUMER_QUEUE, "consumer_rkey": conf.AMQP_CONSUMER_ROUTING_KEY, "publisher_rkey": conf.AMQP_PUBLISHER_ROUTING_KEY, "concurrency": concurrency, "loglevel": loglevel, "pidfile": pidfile, "statistics": settings.CELERY_STATISTICS and "ON" or "OFF", "celerybeat": run_clockservice and "ON" or "OFF", }) print("Celery has started.") if detach: from celery.log import setup_logger, redirect_stdouts_to_logger context = platform.create_daemon_context(logfile, pidfile, chroot_directory=chroot, working_directory=working_directory, umask=umask, uid=uid, gid=gid) context.open() logger = setup_logger(loglevel, logfile) redirect_stdouts_to_logger(logger, loglevel) # Run the worker init handler. # (Usually imports task modules and such.) current_loader.on_worker_init() def run_worker(): worker = WorkController(concurrency=concurrency, loglevel=loglevel, logfile=logfile, embed_clockservice=run_clockservice, is_detached=detach) # Install signal handler that restarts celeryd on SIGHUP, # (only on POSIX systems) install_worker_restart_handler(worker) try: worker.start() except Exception, e: emergency_error(logfile, "celeryd raised exception %s: %s\n%s" % ( e.__class__, e, traceback.format_exc()))