|  | @@ -1,11 +1,14 @@
 | 
											
												
													
														|  | -import sys
 |  | 
 | 
											
												
													
														|  | 
 |  | +import os
 | 
											
												
													
														|  | 
 |  | +import shlex
 | 
											
												
													
														|  |  import socket
 |  |  import socket
 | 
											
												
													
														|  | 
 |  | +import sys
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  from celery.utils.compat import defaultdict
 |  |  from celery.utils.compat import defaultdict
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  EXAMPLES = """
 |  |  EXAMPLES = """
 | 
											
												
													
														|  |  Some examples:
 |  |  Some examples:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    # The "start" command just prints the commands needed to start the workers.
 | 
											
												
													
														|  |      # Advanced example with 10 workers:
 |  |      # Advanced example with 10 workers:
 | 
											
												
													
														|  |      #   * Three of the workers processes the images and video queue
 |  |      #   * Three of the workers processes the images and video queue
 | 
											
												
													
														|  |      #   * Two of the workers processes the data queue with loglevel DEBUG
 |  |      #   * Two of the workers processes the data queue with loglevel DEBUG
 | 
											
										
											
												
													
														|  | @@ -13,20 +16,25 @@ Some examples:
 | 
											
												
													
														|  |      $ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5:data
 |  |      $ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5:data
 | 
											
												
													
														|  |          -Q default -L:4,5 DEBUG
 |  |          -Q default -L:4,5 DEBUG
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    # To actually start the workers into the background you need to
 | 
											
												
													
														|  | 
 |  | +    # use the "detach" command:
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach 10 -l INFO -Q:1-3 images,video -Q:4,5:data
 | 
											
												
													
														|  | 
 |  | +        -Q default -L:4,5 DEBUG
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      # get commands to start 10 workers, with 3 processes each
 |  |      # get commands to start 10 workers, with 3 processes each
 | 
											
												
													
														|  | -    $ celeryd-multi start 3 -c 3
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach 3 -c 3
 | 
											
												
													
														|  |      celeryd -n celeryd1.myhost -c 3
 |  |      celeryd -n celeryd1.myhost -c 3
 | 
											
												
													
														|  |      celeryd -n celeryd2.myhost -c 3
 |  |      celeryd -n celeryd2.myhost -c 3
 | 
											
												
													
														|  |      celeryd- n celeryd3.myhost -c 3
 |  |      celeryd- n celeryd3.myhost -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # start 3 named workers
 |  |      # start 3 named workers
 | 
											
												
													
														|  | -    $ celeryd-multi start image video data -c 3
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach image video data -c 3
 | 
											
												
													
														|  |      celeryd -n image.myhost -c 3
 |  |      celeryd -n image.myhost -c 3
 | 
											
												
													
														|  |      celeryd -n video.myhost -c 3
 |  |      celeryd -n video.myhost -c 3
 | 
											
												
													
														|  |      celeryd -n data.myhost -c 3
 |  |      celeryd -n data.myhost -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # specify custom hostname
 |  |      # specify custom hostname
 | 
											
												
													
														|  | -    $ celeryd-multi start 2 -n worker.example.com -c 3
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach 2 -n worker.example.com -c 3
 | 
											
												
													
														|  |      celeryd -n celeryd1.worker.example.com -c 3
 |  |      celeryd -n celeryd1.worker.example.com -c 3
 | 
											
												
													
														|  |      celeryd -n celeryd2.worker.example.com -c 3
 |  |      celeryd -n celeryd2.worker.example.com -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -34,20 +42,20 @@ Some examples:
 | 
											
												
													
														|  |      # but you can also modify the options for ranges of or single workers
 |  |      # but you can also modify the options for ranges of or single workers
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # 3 workers: Two with 3 processes, and one with 10 processes.
 |  |      # 3 workers: Two with 3 processes, and one with 10 processes.
 | 
											
												
													
														|  | -    $ celeryd-multi start 3 -c 3 -c:1 10
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach 3 -c 3 -c:1 10
 | 
											
												
													
														|  |      celeryd -n celeryd1.myhost -c 10
 |  |      celeryd -n celeryd1.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n celeryd2.myhost -c 3
 |  |      celeryd -n celeryd2.myhost -c 3
 | 
											
												
													
														|  |      celeryd -n celeryd3.myhost -c 3
 |  |      celeryd -n celeryd3.myhost -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # can also specify options for named workers
 |  |      # can also specify options for named workers
 | 
											
												
													
														|  | -    $ celeryd-multi start image video data -c 3 -c:image 10
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach image video data -c 3 -c:image 10
 | 
											
												
													
														|  |      celeryd -n image.myhost -c 10
 |  |      celeryd -n image.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n video.myhost -c 3
 |  |      celeryd -n video.myhost -c 3
 | 
											
												
													
														|  |      celeryd -n data.myhost -c 3
 |  |      celeryd -n data.myhost -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # ranges and lists of workers in options is also allowed:
 |  |      # ranges and lists of workers in options is also allowed:
 | 
											
												
													
														|  |      # (-c:1-3 can also be written as -c:1,2,3)
 |  |      # (-c:1-3 can also be written as -c:1,2,3)
 | 
											
												
													
														|  | -    $ celeryd-multi start 5 -c 3  -c:1-3 10
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach 5 -c 3  -c:1-3 10
 | 
											
												
													
														|  |      celeryd -n celeryd1.myhost -c 10
 |  |      celeryd -n celeryd1.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n celeryd2.myhost -c 10
 |  |      celeryd -n celeryd2.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n celeryd3.myhost -c 10
 |  |      celeryd -n celeryd3.myhost -c 10
 | 
											
										
											
												
													
														|  | @@ -55,7 +63,7 @@ Some examples:
 | 
											
												
													
														|  |      celeryd -n celeryd5.myhost -c 3
 |  |      celeryd -n celeryd5.myhost -c 3
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # lists also works with named workers
 |  |      # lists also works with named workers
 | 
											
												
													
														|  | -    $ celeryd-multi start foo bar baz xuzzy -c 3 -c:foo,bar,baz 10
 |  | 
 | 
											
												
													
														|  | 
 |  | +    $ celeryd-multi detach foo bar baz xuzzy -c 3 -c:foo,bar,baz 10
 | 
											
												
													
														|  |      celeryd -n foo.myhost -c 10
 |  |      celeryd -n foo.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n bar.myhost -c 10
 |  |      celeryd -n bar.myhost -c 10
 | 
											
												
													
														|  |      celeryd -n baz.myhost -c 10
 |  |      celeryd -n baz.myhost -c 10
 | 
											
										
											
												
													
														|  | @@ -185,10 +193,19 @@ def say(m):
 | 
											
												
													
														|  |      sys.stderr.write("%s\n" % (m, ))
 |  |      sys.stderr.write("%s\n" % (m, ))
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +def detach_worker(argv):
 | 
											
												
													
														|  | 
 |  | +    path = sys.executable
 | 
											
												
													
														|  | 
 |  | +    argv = [sys.executable, "-m", "celery.bin.celeryd_detach"] + argv
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    if os.fork() == 0:
 | 
											
												
													
														|  | 
 |  | +        os.execv(path, argv)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  class MultiTool(object):
 |  |  class MultiTool(object):
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def __init__(self):
 |  |      def __init__(self):
 | 
											
												
													
														|  |          self.commands = {"start": self.start,
 |  |          self.commands = {"start": self.start,
 | 
											
												
													
														|  | 
 |  | +                         "detach": self.detach,
 | 
											
												
													
														|  |                           "names": self.names,
 |  |                           "names": self.names,
 | 
											
												
													
														|  |                           "expand": self.expand,
 |  |                           "expand": self.expand,
 | 
											
												
													
														|  |                           "get": self.get,
 |  |                           "get": self.get,
 | 
											
										
											
												
													
														|  | @@ -224,6 +241,13 @@ class MultiTool(object):
 | 
											
												
													
														|  |          print("\n".join(worker
 |  |          print("\n".join(worker
 | 
											
												
													
														|  |                          for _, worker, _ in multi_args(p, cmd)))
 |  |                          for _, worker, _ in multi_args(p, cmd)))
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def detach(self, argv, cmd):
 | 
											
												
													
														|  | 
 |  | +        p = NamespacedOptionParser(argv)
 | 
											
												
													
														|  | 
 |  | +        p.options.setdefault("--pidfile", "celeryd@%n.pid")
 | 
											
												
													
														|  | 
 |  | +        p.options.setdefault("--logfile", "celeryd@%n.log")
 | 
											
												
													
														|  | 
 |  | +        for argv in [argv for _, argv, _ in multi_args(p, cmd)]:
 | 
											
												
													
														|  | 
 |  | +            detach_worker(shlex.split(argv))
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def expand(self, argv, cmd=None):
 |  |      def expand(self, argv, cmd=None):
 | 
											
												
													
														|  |          template = argv[0]
 |  |          template = argv[0]
 | 
											
												
													
														|  |          p = NamespacedOptionParser(argv[1:])
 |  |          p = NamespacedOptionParser(argv[1:])
 |