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



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

删除所有单一类型的作业

使用以下命令(仅替换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]+t0t' | 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)中删除作业不会从gearmand中删除作业,直到它重新启动(因为gearmand进程有内存缓存)

使用持久化队列很简单,只需截断队列表

相关内容

  • 没有找到相关文章

最新更新