#!/bin/bash
# **********************************************************************
# * TEXTLIB szerver indts - Linux alatt   V2.00
# *    Hasznlat: tl_serv paramterek ...
# *
# * Vltozk: (egyik sem ktelez)
# *        TLPARAM= a program paramterei itt is megadhatk
# *        TLPAR1 = csak szervernek szolo parameterek
# *        TLPAR2 = paramterek, amik menet kzben vltoznak
# **********************************************************************

# SendMail = elkuldi a mailt, ki is irja TLSRVLOG-ba ugyanazt
# $1 - subject
function SendMail() {
  IDOPONT=`date +"%y/%m/%d %H:%M"`
  echo -e "$E_BODY" >> $TLSRVLOG
  if [ "$TLEMAIL" == "" ]; then TLEMAIL=root; fi
  if [ "$TLEMAIL" != "0" ]; then
    echo -e "$E_BODY" | mail -s "$1:$IDOPONT" $TLEMAIL
    echo "Email kuldve: $TLEMAIL" >> $TLSRVLOG
  fi
}

. /usr/share/textlib/exe/tl_setpar 

# Itt lehet beallitani az env. valtozokat...
[[ -f $PRGPATH/tl_sets$ext ]] && \
   . $PRGPATH/tl_sets$ext

# szokasos buktatok 1: atmasolt adatbazis filenevek nagybetusek
([ -f $DBPATH/TL_SYS.DBF ] || [ -f $DBPATH/TL_SYS.NDX ]) && \
    { echo "--- Filenevek nagybetusek! ($DBPATH/)" >> $TLSRVLOG
     $PRGPATH/nagykis -r $DBPATH/* >> $TLSRVLOG
      echo "--- Filenevek kisbetusre alakitva..." >> $TLSRVLOG
    }

# van-e adatbazis?
if [ ! -f $DBPATH/tl_sys.dbf ]; then
   echo "--- Nincs itt adatbazis: $DBPATH" >> $TLSRVLOG
   echo "--- Elobb masolja ide az adatbazist (*.dbf, *.pos, *.ndx)" >> $TLSRVLOG
   echo "--- majd allitsa be a jogokat: $PRGPATH/tl_setdb $par" >> $TLSRVLOG
   exit 1
fi

# adatbazis nem olvashato - mas user-kent van belepve?
if [ ! -r $DBPATH/tl_sys.dbf ]; then
   echo "--- Adatbazis nem olvashato!" >> $TLSRVLOG
   echo "--- ? Le lett futtatva a $PRGPATH/tl_setdb $par ?" >> $TLSRVLOG
   echo "--- ? Tagja On a textlib group-nak?" >> $TLSRVLOG
   echo "--- Ez kellene legyen:" >> $TLSRVLOG
   echo "-rw-rw-r-- 1 xxxx textlib ... $DBPATH/tl_sys.dbf" >> $TLSRVLOG
   echo "--- Ez van:" >> $TLSRVLOG
   ls -l $DBPATH/tl_sys.dbf >> $TLSRVLOG
   exit 1;
fi

# szokasos buktatok 2: CD-rol masolt adatbazis irasvedett
if [ ! -w $DBPATH/tl_sys.dbf ]; then
   echo "Adatbazis nem irhato!" >> $TLSRVLOG
   echo "--- ? Le lett futtatva a $PRGPATH/tl_setdb $par ?" >> $TLSRVLOG
   echo "--- ? Tagja On a textlib group-nak?" >> $TLSRVLOG
   echo "--- Ez kellene legyen:" >> $TLSRVLOG
   echo "-rw-rw-r-- 1 xxxx textlib ... $DBPATH/tl_sys.dbf" >> $TLSRVLOG
   echo "--- Ez van:" >> $TLSRVLOG
   ls -l $DBPATH/tl_sys.dbf >> $TLSRVLOG
   exit 1;
fi

if [ ! -f $DBPATH/tl_sys.ndx ]; then
   echo "--- Nincs indexelt adatbazis! Csak adatfile-ok vannak." >> $TLSRVLOG
   echo "--- Indexeles inditasa: $PRGPATH/indexel1 $par" >> $TLSRVLOG
   exit 1;
fi

# Min. X masodpercet futtott, akkor indithatjuk ujra, ha elszallt.
TLSRVMINTIME=5
# Max. ennyiszer inditjuk ujra elszallas miatt.
TLSRVMAXNUM=2

TLEND=1
TLSRVNUM=0
E_BODY="e_body ures"

while [ $TLEND = 1 ]; do

TLEND=0
TLSRVNUM=$(($TLSRVNUM+1))

# van-e naplozo program
if [ ! -f $PRGPATH/$NAPLO ]; then
    echo "--- Nincs naplozo program ($NAPLO) !" >> $TLSRVLOG
    exit 1;
fi

# van-e szerver program? Ha van adatbazishoz tartozo, akkor az...
if [ "$SERVER2" != "" -a "$SERVER" != "$SERVER2" ]; then
  if [ -x $PRGPATH/$SERVER2 ]; then
       echo -n "$SERVER2"
       SERVER=$SERVER2
  fi   
fi
# kulonben a default exe
if [ ! -x $PRGPATH/$SERVER ]; then
    echo "--- Nincs TextLib szerver program! ($SERVER)" >> $TLSRVLOG
    exit 1;
fi

# ne fusson TL szerver
PidRun $TLSRVPID
if [ -f $TLSRVPID ]; then
  echo "!!! Fut mar a TextLib szerver! ($SERVER)" >> $TLSRVLOG
  exit 1;
fi

# ne fusson Naplozo
PidRun $NAPLOPID g-naplo.exe
if [ -f $NAPLOPID ]; then
   echo "--- Fut a naplozo program ($NAPLO) !" >> $TLSRVLOG
   exit 1;
fi

# egyeb ellenorzesek, hogy nem megy-e meg a szerver?
# Ha ps nem talalta meg, akkor nem megy, ezt nem is kell nezni.
# Ha megis van, akkor elszallas volt - torolni
rm -f $DBPATH/tl_serv.ip*

### itt indul tenylegesen

echo "--- TextLib$par szerver indul - `date`" >> $TLSRVLOG

# *** Elotte lefuttatando feladat
[[ -f $PRGPATH/tl_elott$ext ]] && \
    . $PRGPATH/tl_elott$ext >> $TLSRVLOG

# naplo ellenorzes
if [[ "$1" != "/nojournal" ]]; then
  echo "$PRGPATH/$NAPLO $par ell /ment /tolt $TLPARAM $TLPAR2\
         $1 $2 $3 $4 $5 $6 $7 $8 /Anem /_startsrv_" >> $TLSRVLOG
  $PRGPATH/$NAPLO $par ell /ment /tolt $TLPARAM $TLPAR2\
         $1 $2 $3 $4 $5 $6 $7 $8 /Anem /_startsrv_ >> $TLSRVLOG
  [[ $? -ge 2 ]] &&\
      { echo "--- Naplozasi hiba" >> $TLSRVLOG
        exit 1;
      }
fi

# tl_indul
if [ -f $PRGPATH/tl_indul$ext ]; then
      . $PRGPATH/tl_indul$ext >> $TLSRVLOG
fi

# szerver inditasa - output ne log-ba, mert akkor ketszer lesz!
echo "*** Debug beallitasok" >> $TLSRVLOG
echo "*** Akt.dir: $PWD, CorePath: $COREPATH" >> $TLSRVLOG
ulimit -c unlimited >> $TLSRVLOG 2>&1
ULIMIT=`ulimit -c`
echo "*** ulimit -c: $ULIMIT" >> $TLSRVLOG
mkdir $COREPATH 2> /dev/null
chmod 777 $COREPATH 2> /dev/null
# Debuggos/coredump futtatas
DEBUGRUN=0
CORERUN=0
if [ -f $TLCORERUN ]; then
   CORERUN=1
fi
if [ -f $TLDEBUGRUN ]; then
  if [ -x $PRGPATH/$SERVERDBG ]; then
    echo "*** Debuggos exe futtatasa..." >> $TLSRVLOG
    DEBUGRUN=1
    CORERUN=1
    SERVER=$SERVERDBG
  else
    echo "*** Nincs $SERVERDBG, $SERVER indul..." >> $TLSRVLOG
  fi  
fi
# Root-kent inditjak, suid bit miatt nem lenne coredump! Ezert leszedjuk
if [ "$UID" == "0" ]; then
    chmod ug+s $PRGPATH/$SERVER
fi
if [ "$CORERUN" == "1" ]; then
  if [ "$UID" == "0" ]; then
    chmod ug-s $PRGPATH/$SERVER
    echo 1 > /proc/sys/kernel/core_uses_pid
    echo "$COREPATH/%e-%t-%s.core" > /proc/sys/kernel/core_pattern
    echo "*** Inditas: Coredump; $SERVER jog atallitva!" >> $TLSRVLOG
  else
    echo "*** Inditas: $SERVER indul (UID: $UID)" >> $TLSRVLOG
  fi
fi
TLSRVSTART=`date +%s`
$PRGPATH/$SERVER $par $TLPARAM $TLPAR1 $TLPAR2 $TLDBPAR $1 $2 $3 $4 $5 $6 $7 $8 >> $TLSRVLOG 2>&1
TLSRET=$?
TLSRVSTOP=`date +%s`
TLSRVTIME=$(($TLSRVSTOP-$TLSRVSTART))
if [ "$UID" == "0" ]; then
    chmod ug+s $PRGPATH/$SERVER
fi

# visszaadott ertek vizsgalata
echo "--- Szerver kilep: $TLSRET" >> $TLSRVLOG
IDOPONT=`date +"%y/%m/%d %H:%M"`
rm -f $DBPATH/tl_serv.ip*
rm -f $TLSRVPID
if [[ "$TLSRET" = "1" ]]; then
 TLEND=1
 TLSRVNUM=0
fi
if [[ $TLSRET == 1 && -f $PRGPATH/tl_ptime$ext ]]; then
  . $PRGPATH/tl_ptime$ext >> $TLSRVLOG
fi
if [[ $TLSRET == 2 ]]; then
    echo -e "!!! Kivulrol erkezett leallitas - `date`\n" >> $TLSRVLOG
    echo "***** Kivulrol erkezett leallitas - `date`" >> $NAPLOLOG
    [[ -f $PRGPATH/tl_utan$ext ]] && \
       . $PRGPATH/tl_utan$ext >> $TLSRVLOG
    exit 0
fi
if [[ $TLSRET -ge 3 ]]; then
    E_BODY="!!! TL szerver hiba: $TLSRET - `date`"
    echo "***** TL szerver hibas kilepes: $TLSRET - `date`" >> $NAPLOLOG
    if [ -f $COREPATH/tlsrv.core ]; then
         TLDD=`date +"%y%m%d%H%M"`
         mv $COREPATH/tlsrv.core $COREPATH/tlsrv.core.$TLDD
         E_BODY="$E_BODY\nCorefile: $COREPATH/tlsrv.core.$TLDD"
    fi
    # Ha nem nagyon gyorsan allt le, akkor hiba utan inditsuk ujra.
    # Tul sokszor se inditsuk ujra... Csak SIGSEGV miatt indul ujra!
    if [[ $TLSRET == 139 ]] ; then
      TIME_OK=$(( $TLSRVTIME>=$TLSRVMINTIME || $TLSRVTIME<0 ));
      NUM_OK=$(($TLSRVNUM<$TLSRVMAXNUM));
      if [ "$TIME_OK" == "1" -a "$NUM_OK" == "1" ]; then
        TLEND=1
        E_BODY="$E_BODY\n!!! TLSRV ujrainditas ($TLSRVNUM db, $TLSRVTIME sec)"
        SendMail "TlSrv ujraindulas"
        continue
      else
        E_BODY="$E_BODY\n!!! TLSRV ujrainditas nincs ($TLSRVNUM db, $TLSRVTIME sec)"
        SendMail "TlSrv elszallas"
        exit 0
      fi
    fi
fi

# utana is naplo ellenorzes
if [[ "$1" != "/nojournal" ]]; then
  echo "$PRGPATH/$NAPLO $par ell /ment /tolt $TLPARAM $TLPAR2\
         $1 $2 $3 $4 $5 $6 $7 $8 /Anem /_stopsrv_" >> $TLSRVLOG
  $PRGPATH/$NAPLO $par ell /ment /tolt $TLPARAM $TLPAR2\
      $1 $2 $3 $4 $5 $6 $7 $8 /Anem /_stopsrv_ >> $TLSRVLOG
  # biztonsagi menteni kell?
  if [ "$?" == "1" ]; then
     if [ -f $PRGPATH/tl_bment$ext ]; then
         . $PRGPATH/tl_bment$ext >> $TLSRVLOG
     else
         echo "Nincs $PRGPATH/tl_bment$ext !" >> $TLSRVLOG
     fi
  else
     echo "Nem kell biztonsagi mentes ($?) !" >> $TLSRVLOG
  fi
else
  echo "Be van kapcsolva: /nojournal !" >> $TLSRVLOG
fi

# idore kilepes volt?
[[ $TLEND = 1 && -f $PRGPATH/tl_time$ext ]] && \
     . $PRGPATH/tl_time$ext >> $TLSRVLOG
[[ $TLEND = 1 ]] && \
     echo "--- Tl$par szerver ujraindul - `date`" >> $TLSRVLOG

done

# utana lefuttatando
[[ -f $PRGPATH/tl_utan$ext ]] && \
    . $PRGPATH/tl_utan$ext >> $TLSRVLOG

echo "--- TextLib szerver leallt $par- `date`" >> $TLSRVLOG

#vege
