从Gearman作业服务器中删除所有Gearman作业

时间:2011-08-16 12:36:36

标签: php unit-testing gearman

有没有办法从Gearman作业服务器中删除所有Gearman作业?我有一个PHP应用程序在后台运行Gearman作业。对于我的单元测试,我需要确保a)没有工作等待执行它的工人和b)没有工人工作。后者并不重要,因为很容易杀死工人而前者 - 我不知道如何实现这一点。

2 个答案:

答案 0 :(得分:32)

删除所有单一类型的作业

使用以下命令(只需替换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替换为您的gearmand服务器地址和端口。

  
    

ps:从持久存储中删除作业(即sqlite)在重启之前不会将它们从gearmand中删除(因为gearmand进程具有内存缓存)

  

答案 1 :(得分:0)

使用Persisten Queues很容易,只需截断队列表。