I'm trying to run celery multi workers for a specific group of task with the command
celery multi start proj.main -E
but when I execute it got me this permission error
celery multi start proj.main -E
celery multi v5.2.3 (dawn-chorus)
Traceback (most recent call last):
File "/home/developer/.pyenv/versions/3.9.5/envs/CeleryRabbit/bin/celery", line 8, in <module>
sys.exit(main())
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/__main__.py", line 15, in main
sys.exit(_main())
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/celery.py", line 213, in main
return celery(auto_envvar_prefix="CELERY")
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/core.py", line 1128, in __call__
return self.main(*args, **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/core.py", line 1053, in main
rv = self.invoke(ctx)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/core.py", line 1659, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/base.py", line 134, in caller
return f(ctx, *args, **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 480, in multi
return cmd.execute_from_commandline(args)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 271, in execute_from_commandline
return self.call_command(argv[0], argv[1:])
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 278, in call_command
return self.commands[command](*argv) or EX_OK
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 148, in _inner
return fun(self, *args, **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 156, in _inner
return fun(self, self.cluster_from_argv(argv), **kwargs)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 366, in cluster_from_argv
_, cluster = self._cluster_from_argv(argv, cmd=cmd)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/bin/multi.py", line 371, in _cluster_from_argv
return p, self.Cluster(list(nodes), cmd=cmd)
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/apps/multi.py", line 319, in <genexpr>
self._node_from_options(
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/apps/multi.py", line 328, in _node_from_options
return Node(nodename, cmd, append,
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/apps/multi.py", line 132, in __init__
self.options = self._annotate_with_default_opts(
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/apps/multi.py", line 140, in _annotate_with_default_opts
self._setdefaultopt(options, ['--pidfile', '-p'], '/var/run/celery/%n.pid')
File "/home/developer/.pyenv/versions/CeleryRabbit/lib/python3.9/site-packages/celery/apps/multi.py", line 154, in _setdefaultopt
os.makedirs(dir_path)
File "/home/developer/.pyenv/versions/3.9.5/lib/python3.9/os.py", line 225, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/run/celery'
I didn't get this error if I execute differents workers in differents terminals
my project structure is:
proj
__init__.py
celeryconfig.py
main.py
tasks.py
how can I use multi my celery version is v5.2.3
my celeryconfig.py
# config for proj celery
broker_url = 'pyamqp://'
result_backend = 'rpc://'
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'America/Caracas'
enable_utc = True
include = ['proj.tasks']
task_ignore_result = True
my main.py
from celery import Celery
app = Celery('proj')
app.conf.update(result_expires=3600)
app.config_from_object("proj.celeryconfig")
if __name__ == '__main__':
app.start()
tasks.py
import random
import time
from .main import app
@app.task
def too_long_task(n):
t = random.randint(4, 8)
time.sleep(t)
return f"task n:{n} long task done"
@app.task
def quick_task(n):
t = random.randint(0, 3)
time.sleep(t)
return f"task n:{n} quick task done"
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def rest(x, y):
return x - y
@app.task
def n_add(numbers):
return sum(numbers)