From b33776ec58263cd3b1f6b844487f1aa7c7a99292 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 27 Jun 2016 14:46:54 +0100 Subject: [PATCH] Parallelise --- notify | 56 ++++++++++++++++++++++++++++--------------------------- onemethod | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 27 deletions(-) create mode 100755 onemethod diff --git a/notify b/notify index f061ffc..e13d97e 100755 --- a/notify +++ b/notify @@ -34,30 +34,32 @@ while read settingname value; do esac done -exec <"$rcpts" -line=0 -while read method data; do - line=$(( $line+1 )) - case "$method" in - #*|'') continue ;; - [^a-z]*) echo >&2 "huh ? $rcpts:$line: $method"; continue ;; - esac - log=log-$method-$line.txt - exec >$log - set +e - printf >&2 "$method" - exec 3>&2 2>&1 - set -x - ./"via-$method" "$msg" $data 2>&1 - rc=$? - set +x - exec 2>&3 3>&- - set -e - if [ $rc != 0 ]; then - printf >&2 -- "-FAIL:%s\n" $log - else - printf >&2 " " - fi -done -exec >&2 -echo >&2 +perl <"$rcpts" -wne ' + use strict; + our @children; + our @passon; + BEGIN { @passon = @ARGV; @ARGV = (); } + s/^\s+//; + s/\s+$//; + next if m/^\#/; + next unless m/\S/; + die unless m/^([a-z]\w+)\s/; + my $method = $1; + my $child = fork; + defined $child or die $!; + if (!$child) { + exec "./onemethod", $method, @passon; + die $!; + } + push @children, $child; + END { + foreach my $child (@children) { + $!=$?=0; + my $got = waitpid $child, 0; + die $! unless $got==$child; + warn "$method [$child] $?" if $?; + } + } +' "$rcpts" "$msg" + +echo diff --git a/onemethod b/onemethod new file mode 100755 index 0000000..252c084 --- /dev/null +++ b/onemethod @@ -0,0 +1,47 @@ +#!/bin/bash +set -e +usage () { cat <&2; exit 1 ;; +esac + +onemethod="$1" +rcpts="$2" +msg="$3" + +exec <"$rcpts" +line=0 +while read method data; do + line=$(( $line+1 )) + case "$method" in + #*|'') continue ;; + [^a-z]*) echo >&2 "huh ? $rcpts:$line: $method"; continue ;; + "$onemethod") ;; + *) continue ;; + esac + log=log-$method-$line.txt + exec >$log + set +e + printf >&2 "." + exec 3>&2 2>&1 + set -x + ./"via-$method" "$msg" $data 2>&1 + rc=$? + set +x + exec 2>&3 3>&- + set -e + if [ $rc != 0 ]; then + printf >&2 -- "\n$method-FAIL:%s\n" $log + else + printf >&2 " $method" + fi +done +exec >&2 -- 2.30.2