user1592380
user1592380

Reputation: 36247

How to stop celery worker process

I have a Django project on an Ubuntu EC2 node, which I have been using to set up an asynchronous using Celery.

I am following this along with the docs.

I've been able to get a basic task working at the command line, using:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery --app=myproject.celery:app worker --loglevel=INFO

To start a worker. I have since made some changes to the Python, but realized that I need to restart a worker.

From the command line, I've tried:

 ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

But I can see that the worker is still running.

How can I kill it?

edit:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ sudo ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | sudo xargs kill -HUP
kill: invalid argument H

Usage:
 kill [options] <pid> [...]

Options:
 <pid> [...]            send signal to every <pid> listed
 -<signal>, -s, --signal <signal>
                        specify the <signal> to be sent
 -l, --list=[<signal>]  list all signal names, or convert one to a name
 -L, --table            list all signal names in a nice table

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).

edit 2:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ ps aux|grep celery
ubuntu    9756  0.0  3.4 100868 35508 pts/6    S+   15:49   0:07 /home/ubuntu/.virtualenvs/env1/bin/python3.4 /home/ubuntu/.virtualenvs/env1/bin/celery --app=tp.celery:app worker --loglevel=INFO
ubuntu    9760  0.0  3.9 255840 39852 pts/6    S+   15:49   0:05 /home/ubuntu/.virtualenvs/env1/bin/python3.4 /home/ubuntu/.virtualenvs/env1/bin/celery --app=tp.celery:app worker --loglevel=INFO
ubuntu   12760  0.0  0.0  10464   932 pts/7    S+   19:04   0:00 grep --color=auto celery

Upvotes: 55

Views: 106617

Answers (5)

Paulo Peres Junior
Paulo Peres Junior

Reputation: 559

If the celery worker is running on a machine you do not have access to, you can use Celery "remote control" to control workers through messages sent via the broker.

celery control shutdown

This will kill all workers immediately. Depending on your setup, you might have to use -A myProject, like with Django.

Documentation here.

Upvotes: 42

D4nt3
D4nt3

Reputation: 56

In case someone's looking to shutdown their celery app programmatically, the same thing can be done in python with: celery_app.control.shutdown()

Upvotes: 1

walter
walter

Reputation: 639

ps auxww | grep 'celery worker' | grep -v " grep " | awk '{print $2}' | xargs kill -9

this one is very similar to one presented before but improved because avoid the error that shows when attempt to kill the grep process..

Upvotes: 4

itzMEonTV
itzMEonTV

Reputation: 20339

Try this in terminal

ps aux|grep 'celery worker'

You will see like this

username  29042  0.0  0.6  23216 14356 pts/1    S+   00:18   0:01 /bin/celery worker ...

Then kill process id by

sudo kill -9 process_id # here 29042

If you have multiple processes, then you have to kill all process id using above kill commmand

sudo kill -9 id1 id2 id3 ...

From the celery doc

ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

OR if you are running celeryd

ps auxww | grep celeryd | awk '{print $2}' | xargs kill -9

Note

If you are running celery in supervisor, even though kill the process, it automatically restarts(if autorestart=True in supervisor script).

Upvotes: 80

alan_wang
alan_wang

Reputation: 855

pkill -f "celery worker"

easy to kill process by string patterns

Upvotes: 56

Related Questions