chiark / gitweb /
hacky exim queue admin helpers
authorColin Watson <cjwatson@chiark.greenend.org.uk>
Tue, 20 Apr 2010 22:12:23 +0000 (22:12 +0000)
committerColin Watson <cjwatson@chiark.greenend.org.uk>
Tue, 20 Apr 2010 22:12:23 +0000 (22:12 +0000)
exim-kill [new file with mode: 0755]
exim-kill-menu [new file with mode: 0755]

diff --git a/exim-kill b/exim-kill
new file mode 100755 (executable)
index 0000000..24e6872
--- /dev/null
+++ b/exim-kill
@@ -0,0 +1,2 @@
+#! /bin/sh
+sudo exim -bp | grep -B1 -- "$1" | fgrep '*** frozen ***' | sed 's/^ *//' | tr -s ' ' | cut -d' ' -f3 | sudo xargs -r exim -Mrm
diff --git a/exim-kill-menu b/exim-kill-menu
new file mode 100755 (executable)
index 0000000..4dd6a5e
--- /dev/null
@@ -0,0 +1,37 @@
+#! /bin/bash
+addrs="$(sudo exim -bp | fgrep -A1 '*** frozen ***' | sed -n '/ \{10\}/s/^ *//p' | sort -u)"
+while [ "$addrs" ]; do
+    declare -a addrindex
+    i=1
+    for addr in $addrs; do
+       printf '%d) %s\n' "$i" "$addr"
+       addrindex[$i]="$addr"
+       i="$(($i + 1))"
+    done
+    max="$(($i - 1))"
+    while :; do
+       printf '#? '
+       read line
+       if [ -z "$line" ]; then
+           break 2
+       elif expr "$line" : '[0-9][0-9]*$' >/dev/null; then
+           exim-kill "${addrindex[$line]}"
+           addrs="$(echo "$addrs" | fgrep -vx -- "${addrindex[$line]}")"
+           break
+       elif expr "$line" : '[0-9]*-[0-9]*$' >/dev/null; then
+           addrstart="${line%%-*}"
+           addrend="${line#*-}"
+           [ "$addrstart" ] || addrstart=1
+           [ "$addrend" ] || addrend="$max"
+           i="$addrstart"
+           tokill=
+           while [ "$i" -le "$addrend" ]; do
+               tokill="${tokill:+$tokill\\|}${addrindex[$i]}"
+               addrs="$(echo "$addrs" | fgrep -vx -- "${addrindex[$i]}")"
+               i="$(($i + 1))"
+           done
+           exim-kill "$tokill"
+           break
+       fi
+    done
+done