-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprearc.in
100 lines (86 loc) · 2.53 KB
/
prearc.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#! /bin/sh
# $Id$
#
# PreARC: Komprimieren der ZCONNECT/JANUS Netcalls
# Konvertieren der ZNETZ-Netcalls nach Netcall-3.8 und komprimieren.
# Wird aus der Crontab regelmaessig (z.B. einmal pro Stunde)
# aufgerufen.
#
# Benutzt: einpack
#
# Privileges: laeuft bei mir derzeit als root (daher auch chown...)
#
LOCK=@SPOOLDIR@/locks/prearc.lck
# Das shlock vom INN macht viel bessere Locks. Es erkennt
# beispielsweise auch liegengebliebene Lockfiles. Dann bleiben
# nicht mehr drei Tage lang alle Nachrichten liegen, weil
# irgendjemand den Gate-Rechner gebootet hat...
if [ -x /usr/lib/news/bin/shlock ]; then
/usr/lib/news/bin/shlock -p $$ -f ${LOCK} ||{ echo "$0: Es laeuft bereits ein anderer Prozess" >&2; ls -l $LOCK >&2; exit 1; }
trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
trap 'rm -f ${LOCK} ; exit 0' 0
else
trap "rm -f $LOCK.$$; exit 0" 0 1 2 3
echo $$ > $LOCK.$$
if (umask 222; ln $LOCK.$$ $LOCK) 2>/dev/null
then
# OK -> Datei gab es noch nicht
trap "rm -f $LOCK $LOCK.$$; exit 0" 0 1 2 3
rm -f $LOCK.$$
else
# Fehler -> Lock existierte
echo "$0: es laeuft bereits ein anderer Prozess" >&2
ls -l $LOCK >&2
exit 0
fi
fi
SPOOL=@SPOOLDIR@
TMP=prearc.$$
PATH=@BINDIR@@PATHADD@:$PATH; export PATH
zbatchsmtp
cd @ETCDIR@/systems || exit 1
OK=0
for sys in *
do
if [ -d $SPOOL/$sys ]
then
arc=`fgrep -i 'ArcerOut:' @ETCDIR@/systems/$sys | awk '{print $2}'`
fmt=`fgrep -i 'X-Call:' @ETCDIR@/systems/$sys | awk '{print $2}'`
SYSLOCK=$SPOOL/$sys/prearc.lck # Prearc laueft
NETLOCK=$SPOOL/$sys/netcall.lck # Netcall laeuft
if ! cd $SPOOL/$sys
then
echo "$0: cd $SPOOL/$sys failed"
continue
fi
# Lock fuer dieses System erzeugen
# (das ist so einfach, weil niemand ausser 'prearc' dort Locks erzeugt,
# und ein anderes 'prearc' ist bereits ausgeschlossen)
echo $$ > $SYSLOCK
# System nur bearbeiten, wenn (a) kein Netcall laeuft und (b) Arbeit
# vorhanden ist
WRK=`ls *.prv *.brt 2>/dev/null`
WRK="`find . -type f ! -name \*.lck -print`"
if [ \( ! -r $NETLOCK \) -a \( "$WRK" != "" \) ]; then
if [ $fmt = "JANUS" ]
then
if einpack $arc ../$sys $WRK; then
rm -f $WRK
else
echo "$0: einpack $arc ../$sys $WRK failed" >&2
fi
OK=$?
chown @USER@ ../$sys.* 2>/dev/null
fi
if [ $fmt = "ZCONNECT" ]
then
einpack $arc ../prv.$sys *.prv *.eil *.neu 2>/dev/null
einpack $arc ../brt.$sys *.brt 2>/dev/null
chown @USER@ ../brt.$sys.* 2>/dev/null
chown @USER@ ../prv.$sys.* 2>/dev/null
fi
fi
# Ok, dieses System ist fertig - Lock wieder freigeben
rm -f $SYSLOCK
fi
done