有一个域 foo.com 导致大量邮件守护程序邮件,因此我想从 kubernets pods postfix 邮件队列中清除这些邮件。我已经写了一个脚本,但我不确定这是正确的方法。
kubectl config use-context <context-name>
kubectl exec postfix-pod-0 -n <namespace> -- postqueue -p | grep -B2 foo.com | grep MAILER-DAEMON | awk {'print $1'} > q.txt
cat q.txt | xargs -n1 'kubectl exec postfix-pod-0 -n <namespace> -- /usr/sbin/postsuper -d - '
我成功地从第二个命令获取了所有 MAILER-DAEMON 的队列 ID。但不确定xargs是否将这些队列id从q.txt一一传递到postsuper。
如果我为此获得一个工作脚本,我希望创建一个脚本来清除该集群中所有 pod 中的所有 foo.com MAILER-DAEMON 邮件。
答案1
kubectl -n namespace exec -ti postfix-pod-0 -- /bin/sh -c "postqueue -j | grep ${DEL_ADDR} | jq -r .queue_id | xargs -I {} postsuper -d {}"
描述。在“--”之后写入运行命令,在本例中是带有参数的/bin/sh。
kubectl -n namespace exec -ti postfix-pod-0 --
带有双引号的管道的 Shell 命令将在 pod 上运行:
/bin/sh -c "command"
获取 json 格式的 postfix 队列。 Avery 打印的行是 json 对象:
postqueue -j
现在我们可以通过 grep 命令获取必要的行并传递给 jq。
grep ${DEL_ADDR}
在jq中获取消息id值:
jq -r .queue_id
接下来我们将queue_id传递给xarg并通过postsuper -d将其删除:
xargs -I {} postsuper -d {}