瀏覽代碼

Added --schedule|-s option to celeryd, so it is possible to specify a schedule filename when using the -B option, also debian init scripts is now using the --chdir option of start-stop-daemon. Thanks to David De La Harpe Golden. Closes #72

Ask Solem 15 年之前
父節點
當前提交
e65184933a
共有 5 個文件被更改,包括 27 次插入10 次删除
  1. 1 1
      celery/bin/celerybeat.py
  2. 16 0
      celery/bin/celeryd.py
  3. 4 2
      celery/worker/__init__.py
  4. 3 3
      contrib/debian/init.d/celerybeat
  5. 3 4
      contrib/debian/init.d/celeryd

+ 1 - 1
celery/bin/celerybeat.py

@@ -5,7 +5,7 @@
 
 .. cmdoption:: -s, --schedule
 
-    Path to the schedule database. Defaults to celerybeat-schedule.
+    Path to the schedule database. Defaults to ``celerybeat-schedule``.
     The extension ".db" will be appended to the filename.
 
 .. cmdoption:: -f, --logfile

+ 16 - 0
celery/bin/celeryd.py

@@ -26,6 +26,12 @@
     Also run the ``celerybeat`` periodic task scheduler. Please note that
     there must only be one instance of this service.
 
+.. cmdoption:: -s, --schedule
+
+    Path to the schedule database if running with the ``-B`` option.
+    Defaults to ``celerybeat-schedule``. The extension ".db" will be
+    appended to the filename.
+
 .. cmdoption:: -E, --events
 
     Send events that can be captured by monitors like ``celerymon``.
@@ -93,6 +99,13 @@ OPTION_LIST = (
             action="store_true", dest="run_clockservice",
             help="Also run the celerybeat periodic task scheduler. \
                   Please note that only one instance must be running."),
+    optparse.make_option('-s', '--schedule',
+            default=conf.CELERYBEAT_SCHEDULE_FILENAME,
+            action="store", dest="schedule",
+            help="Path to the schedule database if running with the -B \
+                    option. The extension '.db' will be appended to the \
+                    filename. Default: %s" % (
+                    conf.CELERYBEAT_SCHEDULE_FILENAME)),
     optparse.make_option('-E', '--events', default=conf.SEND_EVENTS,
             action="store_true", dest="events",
             help="Send events so celery can be monitored by e.g. celerymon."),
@@ -104,6 +117,7 @@ class Worker(object):
     def __init__(self, concurrency=conf.CELERYD_CONCURRENCY,
             loglevel=conf.CELERYD_LOG_LEVEL, logfile=conf.CELERYD_LOG_FILE,
             hostname=None, discard=False, run_clockservice=False,
+            schedule=conf.CELERYBEAT_SCHEDULE_FILENAME,
             events=False, **kwargs):
         self.concurrency = concurrency or multiprocessing.cpu_count()
         self.loglevel = loglevel
@@ -111,6 +125,7 @@ class Worker(object):
         self.hostname = hostname or socket.gethostname()
         self.discard = discard
         self.run_clockservice = run_clockservice
+        self.schedule = schedule
         self.events = events
         if not isinstance(self.loglevel, int):
             self.loglevel = conf.LOG_LEVELS[self.loglevel.upper()]
@@ -195,6 +210,7 @@ class Worker(object):
                                 hostname=self.hostname,
                                 ready_callback=self.on_listener_ready,
                                 embed_clockservice=self.run_clockservice,
+                                schedule_filename=self.schedule,
                                 send_events=self.events)
 
         # Install signal handler so SIGHUP restarts the worker.

+ 4 - 2
celery/worker/__init__.py

@@ -104,7 +104,8 @@ class WorkController(object):
 
     def __init__(self, concurrency=None, logfile=None, loglevel=None,
             send_events=conf.SEND_EVENTS, hostname=None,
-            ready_callback=noop, embed_clockservice=False):
+            ready_callback=noop, embed_clockservice=False,
+            schedule_filename=conf.CELERYBEAT_SCHEDULE_FILENAME):
 
         # Options
         self.loglevel = loglevel or self.loglevel
@@ -137,7 +138,8 @@ class WorkController(object):
 
         self.clockservice = None
         if self.embed_clockservice:
-            self.clockservice = EmbeddedClockService(logger=self.logger)
+            self.clockservice = EmbeddedClockService(logger=self.logger,
+                                    schedule_filename=schedule_filename)
 
         prefetch_count = self.concurrency * conf.CELERYD_PREFETCH_MULTIPLIER
         self.listener = CarrotListener(self.ready_queue,

+ 3 - 3
contrib/debian/init.d/celerybeat

@@ -88,7 +88,7 @@ case "$1" in
   start)
     check_dev_null
     log_daemon_msg "Starting celery periodic task scheduler" "celerybeat"
-    if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
+    if start-stop-daemon --start --quiet --oknodo --background --chdir $DJANGO_PROJECT_DIR --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
         log_end_msg 0
     else
         log_end_msg 1
@@ -110,7 +110,7 @@ case "$1" in
     log_daemon_msg "Restarting celery periodic task scheduler" "celerybeat"
     start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $CELERYBEAT_PID_FILE
     check_dev_null log_end_msg
-    if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
+    if start-stop-daemon --start --quiet --oknodo --background --chdir $DJANGO_PROJECT_DIR --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
         log_end_msg 0
     else
         log_end_msg 1
@@ -127,7 +127,7 @@ case "$1" in
         0)
 		# old daemon stopped
 		check_dev_null log_end_msg
-		if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
+		if start-stop-daemon --start --quiet --oknodo --background --chdir $DJANGO_PROJECT_DIR --make-pidfile --pidfile $CELERYBEAT_PID_FILE --exec $CELERYBEAT -- $CELERYBEAT_OPTS; then
 		    log_end_msg 0
 		else
 		    log_end_msg 1

+ 3 - 4
contrib/debian/init.d/celeryd

@@ -82,7 +82,7 @@ case "$1" in
   start)
     check_dev_null
     log_daemon_msg "Starting celery task worker server" "celeryd"
-    if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then
+    if start-stop-daemon --start --quiet --oknodo --background --chdir $DJANGO_PROJECT_DIR --make-pidfile --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then
         log_end_msg 0
     else
         log_end_msg 1
@@ -104,8 +104,7 @@ case "$1" in
     log_daemon_msg "Restarting celery task worker server" "celeryd"
     start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $CELERYD_PID_FILE
     check_dev_null log_end_msg
-    if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then
-        log_end_msg 0
+    if start-stop-daemon --start --quiet --oknodo --background --chdir $DJANGO_PROJECT_DIR --make-pidfile --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then log_end_msg 0
     else
         log_end_msg 1
     fi
@@ -121,7 +120,7 @@ case "$1" in
         0)
 		# old daemon stopped
 		check_dev_null log_end_msg
-		if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then
+		if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --chdir $DJANGO_PROJECT_DIR --pidfile $CELERYD_PID_FILE --exec $CELERYD -- $CELERYD_OPTS; then
 		    log_end_msg 0
 		else
 		    log_end_msg 1