Удалить все задания Gearman с сервера заданий Gearman - PullRequest
13 голосов
/ 16 августа 2011

Есть ли способ удалить все задания Gearman с сервера заданий Gearman?У меня есть приложение PHP, которое запускает задания Gearman в фоновом режиме.Для моих модульных тестов я должен убедиться, что: а) нет рабочих мест, ожидающих работника, который его выполняет, и б) что работника нет.Последнее не так важно, потому что легко убить рабочих, но первое - я не знаю, как это реализовать.

Ответы [ 2 ]

32 голосов
/ 13 января 2012

Удаление всех заданий одного типа

Используйте следующую команду (просто замените FUNCTION_NAME):

gearman -n -w -f FUNCTION_NAME > /dev/null

Чтобы удалить только n количество заданий, добавьте -c n param, т. е. чтобы удалить 20 заданий:

gearman -c 20 -n -w -f FUNCTION_NAME > /dev/null


Удаление всех заданий с сервера

Если вы хотите удалить все задания, выполните следующий цикл:

for MATCH in $(echo status | nc 127.0.0.1 4730 | grep -v \\. |  grep -Pv '^[^\t]+\t0\t' | cut -s -f 1-2 --output-delimiter=\,); 
do 
    gearman -n -w -f ${MATCH%\,*} -c ${MATCH#*\,} > /dev/null;
done

Замените 127.0.0.1 4730 на свой адрес и порт сервера Gearmand.

ps: удаление заданий из постоянного хранилища (например, sqlite) не приведет к их удалению из gearmand, пока он не будет перезапущен (поскольку процесс gearmand имеет кэш в памяти)

0 голосов
/ 31 августа 2011

С помощью Persisten Queues это легко, просто обрежьте таблицу очередей.

...