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