I am having a problem when I run the celery status
or celery purge
commands.
File "/usr/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/lib/python2.7/site-packages/celery/__main__.py", line 30, in main
main()
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 769, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 306, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 761, in handle_argv
return self.execute(command, argv)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 693, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 310, in run_from_argv
sys.argv if argv is None else argv, command)
File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 372, in handle_argv
return self(*args, **options)
File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 269, in __call__
ret = self.run(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 472, in run
replies = I.run('ping', **kwargs)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 324, in run
return self.do_call_method(args, **kwargs)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 346, in do_call_method
callback=self.say_remote_command_reply)
File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 385, in call
return getattr(i, method)(*args)
File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 99, in ping
return self._request('ping')
File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 70, in _request
timeout=self.timeout, reply=True,
File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 306, in broadcast
limit, callback, channel=channel,
File "/usr/lib/python2.7/site-packages/kombu/pidbox.py", line 283, in _broadcast
chan = channel or self.connection.default_channel
File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 755, in default_channel
self.connection
File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 740, in connection
self._connection = self._establish_connection()
File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 695, in _establish_connection
conn = self.transport.establish_connection()
File "/usr/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 112, in establish_connection
conn = self.Connection(**opts)
File "/usr/lib/python2.7/site-packages/amqp/connection.py", line 165, in __init__
self.transport = create_transport(host, connect_timeout, ssl)
File "/usr/lib/python2.7/site-packages/amqp/transport.py", line 294, in create_transport
return TCPTransport(host, connect_timeout)
File "/usr/lib/python2.7/site-packages/amqp/transport.py", line 95, in __init__
raise socket.error(last_err)
socket.error: [Errno 111] Connection refused
I am using SQS BROKER_URL.
The tasks are running fine, but when I want to purge the tasks on a queue (celery purge -f
), I get the above error.
software -> celery:3.1.11 (Cipater) kombu:3.0.18 py:2.7.5
billiard:3.3.0.17 py-amqp:1.4.5
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.default.Loader
settings -> transport:amqp results:disabled
My server has ports 22, 80, 443, 8000 ports open and there are tons of messages in the SQS celery
queue, so the connection between celery and SQS should be fine.
Based on documentation of the commands status and purge you need to provide celery with the celery app you're referring to so that it knows what broker to use. By just typing $celery purge
or by typing $celery status
celery doesn't know what celery app you're targeting and so fails.
Therefore, go to your celery app
$cd /path/to/your/celery/app/directory
and then call celery purge on your app. In this example my directory has celeryapp.py
and the contents are:
from config import config
from celery import Celery
celery_app = Celery('tasks',
backend=config.celery_backend_uri,
broker=config.celery_broker_uri)
celery_app.conf.update(
CELERY_IMPORTS=(
'app.module_a.tasks', # we're not including our tasks here as
'app.module_b.tasks', # our tasks are in other files listed here
)
)
the contents are not as important as our call, but they are provided to show that we have our celery app inside celeryapp.py
so I can call
$celery -A celeryapp status
worker-name-a@node-name: OK
worker-name-b@node-name: OK
or
$celery -A celeryapp purge
WARNING: This will remove all tasks from queue: celery.
There is no undo for this operation!
(to skip this prompt use the -f option)
Are you sure you want to delete all tasks (yes/NO)? yes
No messages purged from 1 queue
I had a similar question here and Sol seemed to confirm that celery will output this error if no app is provided by stating
How would it know what broker transport to use if you don't give it the location of the app?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With