From f796fe1fc09f1cffd3564002abf179b6f852b40a Mon Sep 17 00:00:00 2001 From: Yargo ASUS2 Date: Sun, 13 Jul 2014 23:38:26 +0200 Subject: [PATCH] handling of daemons, skeleton `schneider` and `sender` daemons --- Scratch/yargo.md | 8 +-- examples/ambros1/textsources/ghi/source.cfg | 0 examples/ambros1/textsources/jkl/source.cfg | 0 src/ambros | 81 +++++++++++++++++++++++++---- src/constants.sh | 3 ++ src/schneider | 4 ++ src/sender | 4 ++ 7 files changed, 85 insertions(+), 15 deletions(-) delete mode 100644 examples/ambros1/textsources/ghi/source.cfg delete mode 100644 examples/ambros1/textsources/jkl/source.cfg create mode 100755 src/schneider create mode 100755 src/sender diff --git a/Scratch/yargo.md b/Scratch/yargo.md index 38aef3f..c4385f2 100644 --- a/Scratch/yargo.md +++ b/Scratch/yargo.md @@ -79,14 +79,14 @@ _ok, shellscript_ `src/morse/sniptime` ### Planer -_shellscript_ `src/ambros` +_ok, shellscript_ `src/ambros` - startet und ueberwacht je Kanal einen `Schneider` und einen `Sendechef` - ruft Quellen regelmaessig ab mittels `Bereiter` ### Bereiter -_shellscript_ `scr/extractor` +_ok, shellscript_ `scr/extractor` - gestartet von `Planer` - holt Rohdaten mit `Sauger` und wandelt sie mittels Rezepten in `SauberTexte` um (mit PBL fuer Quellenangaben u Prioritaeten) @@ -100,7 +100,7 @@ _ok, shellscript_ `src/fetcher` ### Schneider -_shellscript_ `src/assembler` +_shellscript_ `src/channeleditor` - erstellt `SendeTexte` (formatierte Texte) via Filesystem fuer `Sendechef`, basierend auf aktuellem Status und _Durchsatzoptimierung_ - erzeugt Filenamen aufsteigend je Kanalprefix @@ -108,7 +108,7 @@ _shellscript_ `src/assembler` ### Sendechef -_shellscript_ `scr/channelchief` +_shellscript_ `scr/channeltransmitter` - erzeugt Textstrom fuer `Sender`, meldet Filestatus zurueck an `Schneider` - unterbricht allenfalls bei Eintreffen von XXX (via Filesystem ueber Datei mit _Index_ `10..19` im Namen, falls kleiner als aktuell laufendes XXX) diff --git a/examples/ambros1/textsources/ghi/source.cfg b/examples/ambros1/textsources/ghi/source.cfg deleted file mode 100644 index e69de29..0000000 diff --git a/examples/ambros1/textsources/jkl/source.cfg b/examples/ambros1/textsources/jkl/source.cfg deleted file mode 100644 index e69de29..0000000 diff --git a/src/ambros b/src/ambros index 7075e96..69f2e39 100644 --- a/src/ambros +++ b/src/ambros @@ -31,6 +31,26 @@ logf=`logfile ambros` # (re)generate morse code table cd morse && ./chargen.sh +# temporary file +tmpf=$TMPDIR/ambros$$.tmp +# database for running daemons +daemons=$TMPDIR/daemons$$.tmp +# function for starting and logging daemons +# $logf and $daemon are global variables +# arg1=action, arg2=channel, arg3=type, arg4=pid +# (arg4 only if action other than start) +dodaemon () { + if test "$1" = "start" + then + SCRIPTDIR=$SCRIPTDIR $SCRIPTDIR/$3 $2 & + dpid=$! + logit $logf daemon:$2 "starting $3 with PID $dpid" + else + dpid=$4 + fi + echo $2 $3 $dpid >>$daemons +} + # create temporary directory, ignore error if already existing mkdir $TMPDIR 2>/dev/null if test ! -d $TMPDIR @@ -57,20 +77,25 @@ unset channels for ch in $lchannels do if test -d $ch -a -x $ch -a -r $ch -a -w $ch -then channels="$ch $channels" +then + if test -r $ch/$CHANNELCONFIG + then channels="$ch $channels" + else + logit $logf channels "configuration file $ch/$CHANNELCONFIG is not readable, ignoring!" + fi else logit $logf channels "$ch is not read/write/accessible directory, ignoring!" fi done -GLOBALSPEED=`configread $AMBROSCONFIG WPM` -GLOBALSPEED=${GLOBALSPEED:-12} -logit $logf init "global speed $GLOBALSPEED Words/min" +SPEED=`configread $AMBROSCONFIG WPM` +SPEED=${GLOBALSPEED:-12} +logit $logf init "global speed $SPEED Words/min" cd "$ROOTDIR" if test ! -d "$SOURCEDIR" -o ! -x "$SOURCEDIR" -o ! -r "$SOURCEDIR" -o ! -w "$SOURCEDIR" then - logit $logf init "source directory ($ROOTDIR/$SOURCEDIR) is unusable - aborting!" + logit $logf init "source directory $ROOTDIR/$SOURCEDIR unusable - aborting!" exit 2 fi @@ -86,15 +111,23 @@ AMBROSABORT=0 trap finish INT TERM STOP -logit $logf init "entering main control loop, PID $$" +# for each channel, start a transmitter and editor daemon +# and log their PID +for ch in $channels +do + cd $ch + dodaemon start $ch sender + dodaemon start $ch schneider + cd "$ROOTDIR" +done -tmpf=$TMPDIR/ambros$$.tmp +logit $logf init "entering main control loop, PID $$" # for communication with extractor extractorfile=$TMPDIR/$EXTRACTORFILE while test $AMBROSABORT -eq 0 -do +do # main loop logit $logf mainloop passing # collect source names @@ -122,9 +155,6 @@ logit $logf mainloop "valid sources: $sources" # fetch and process sources ('_' for channel prefix, i.e 'all' for sources) SCRIPTDIR="$SCRIPTDIR" $SCRIPTDIR/extractor _ $extractorfile $sources -# start&control `assembler` -# start&control `channelchief` - echo echo enter q to abort: read ans @@ -132,7 +162,36 @@ if test "$ans" = "q" then AMBROSABORT=99 fi +# watchdog for daemons +cat $daemons >$tmpf +date "+# watchdog %c" >$daemons +cat $tmpf | { while read ch type pid +do +# ignore comments + if test "$ch" != "#" + then + if ps|grep "^ *$pid .*$type" >/dev/null 2>&1 + then action=log + else action=start + logit $logf daemon "$type for $ch died" + fi + dodaemon $action $ch $type $pid + fi done +} + +done # main loop + +cat $daemons | { while read ch type pid +do +# ignore comments + if test "$ch" != "#" + then + logit $logf daemon killing PID $pid + kill -$DAEMONTERMINATE $pid + fi +done +} # remove all temporary stuff #rm -rf $TMPDIR diff --git a/src/constants.sh b/src/constants.sh index 1413dc5..347e0d0 100644 --- a/src/constants.sh +++ b/src/constants.sh @@ -65,6 +65,9 @@ SOURCESTATUS=status.dat MININDEX=100 MAXINDEX=99999 +# signal number to terminate daemons (argument for kill) +DAEMONTERMINATE=15 + # function to read config value by name # arguments: configfile name [separators] # value in stdout, exit nonzero if error diff --git a/src/schneider b/src/schneider new file mode 100755 index 0000000..d039432 --- /dev/null +++ b/src/schneider @@ -0,0 +1,4 @@ +#!/bin/sh +while true +do sleep 3 +done diff --git a/src/sender b/src/sender new file mode 100755 index 0000000..8e7de2a --- /dev/null +++ b/src/sender @@ -0,0 +1,4 @@ +#!/bin/sh +while true +do sleep 5 +done -- 2.11.4.GIT