Подтвердить что ты не робот

Удалите все задания Gearman с сервера заданий Gearman

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

4b9b3361

Ответ 1

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

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

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

Чтобы удалить только n количество заданий, добавьте параметр -c n, чтобы удалить 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 на ваш адрес и порт сервера передачи.

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

Ответ 2

Использование Persisten Queues легко, просто обрезайте таблицу очередей.