Uživatelské nástroje

Nástroje pro tento web


progs:obiscserver

Toto je starší verze dokumentu!


obiscserver

Aplikační nevizuální server OBIS.

Od verze 4.2.10 je nutné program string (pokud obsahuje mezery nebo CRLF oddělovače parametrů) uzavřít do uvozovek. Navíc lze předávat parametry:

echo 'Login Admin "" data\n<EOF/>\nProgram "print({...}) print(4)" 1 2 3\n<EOF/>\nExit\n<EOF/>\n' | bin/obiscserver -stdin -noxmlrpc -debug 5

Vadí-li Vám viditelné heslo, použijte EncryptedLogin

echo 'EncryptedLogin Petr oVXwzb4= Data\n<EOF/>\nProgram LuaObj:Print("xxx")\n<EOF/>\nExit\n<EOF/>\n' | ./obiscserver -stdin -noxmlrpc

Heslo zakryptujete pomocí: ./passwd -encrypt vaseheslo

Automatický přepočet zakázek a skladu

Následující skripty zajistí aktualizaci všech zakázek a přepočet skladových karet. Lze spouštět např. automaticky každou noc.

Windows

Spouštěcí skript pro Windows prepocet.cmd:

set ROOTDIR=o:\obis4
type %ROOTDIR%\scripts\prepocet.lua | %ROOTDIR%\bin\obiscserver.exe -notrigger -noxmlrpc -stdin > %ROOTDIR%\log\prepocet.log

Linux

Kontrola verze knihoven pro Linux:

objdump -p openssl.so
objdump -p /usr/lib/x86_64-linux-gnu/libssl.so.1.1
strings /usr/lib/x86_64-linux-gnu/libssl.so.1.1 | grep OPENSSL_1
ldd `find lualib5.1/lib/x86_64-Linux/ -iname '*.so'` | grep "not found"

heirloom-mailx nelze pouzit: cat file | mail

řešení: apt-get install mailutils; update-alternatives –config mailx

nebo

cat $LOGDIR/prepocet_skladu.log | egrep "^(CW:|W:|E:)"  | iconv -f utf-8 -t ascii//TRANSLIT > /tmp/chyby-skladu.txt
[ -s /tmp/chyby-skladu.txt ] && echo "Chyby:" | mail -s "chyby prepoctu skladu" -a  /tmp/chyby-skladu.txt $MAILTO
rm /tmp/chyby-skladu.txt

Spouštěcí skript pro Linux prepocet.sh: (setenv.sh)

#!/bin/sh
if [ "$1" = "" ]; then
 . `dirname $0`/setenv.sh
else
 . $1
fi
 
#export OBISDEBUG=true
 
pgrep -f prepocet.pid
if [ $? -eq 0 ]; then
  echo nelze spustit prepocet - jiz bezi PID: `cat $LOGDIR/prepocet.pid`
  exit 1
fi
 
cat << EOF | $ROOTDIR/bin64/obiscserver -userdir $USERDIR -savepid $LOGDIR/prepocet.pid -notrigger -noxmlrpc -stdin > $LOGDIR/prepocet.log 2>&1
Login Admin "$ADMINPASS" $DATANAME
<EOF/>
Program "dofile(VLUADIR()..'/server/v_server_prepocty.lua')"
<EOF/>
Exit
<EOF/>
EOF
 
cp $LOGDIR/prepocet.log $LOGDIR/prepocet-`date '+%F'`.log
/usr/bin/find $LOGDIR -iname 'prepocet-*.log' -mtime +30 -exec /bin/rm -f {} \; #smazat >30 dni stare logy
if ! `grep -q KONEC_OK $LOGDIR/prepocet.log`; then 
  echo "Nenalezen KONEC_OK v prepocet.log"
  cat $LOGDIR/prepocet.log 
fi
 
 
cstocs utf8 ascii $LOGDIR/aktualni_dluh.log > /tmp/$$
[ -s /tmp/$$ ] && cat /tmp/$$ | mail -s dluhy $MAILTO
rm /tmp/$$
 
cstocs utf8 ascii $LOGDIR/prepocet_skladu.log | egrep "^(CW:|W:|E:)" > /tmp/$$
[ -s /tmp/$$ ] && cat /tmp/$$ | mail -s "chyby prepoctu skladu" $MAILTO
rm /tmp/$$
 
egrep "^(CW:|E:)"  $LOGDIR/kontrola_ucto.log > /dev/null
[ $? -eq 0 ] && cstocs utf8 ascii  $LOGDIR/kontrola_ucto.log | mail -s "chyby ucto" $MAILTO
 
egrep "^(CW:|E:)"  $LOGDIR/import_kurzu.log > /dev/null

Dále vytvořte a případně modifikujte v adresari obis4/user program lua/server/v_server_prepocty.lua:

(některé funkce server_prepocty akceptují nepovinné parametry např. jiné než aktuální datum přepočtu apod.)

--dofile(LUADIR().."debug.lua")
--DEBUG.Init({typ={"detail", "novisible", "strict"}})
 
osex.dofile(LUADIR().."/server/server_prepocty.lua")
 
if not PREPOCITAT then
  PREPOCITAT={
   Denik=false, Sklad=true, Zakazky=true,
   Insolvence=false, Dluhy=false, Kurzy=false,
   PrehledVysledku=false, UkolyTerminZMilniku=false,
   CleanLogs=true}
end
 
if PREPOCITAT.Kurzy then server_prepocty.SaveLog(server_prepocty.ImportKurzu(), LOGDIR().."import_kurzu.log") end
if PREPOCITAT.Denik then server_prepocty.SaveLog(server_prepocty.KontrolaDeniku(), LOGDIR().."kontrola_ucto.log") end
if PREPOCITAT.Sklad then server_prepocty.SaveLog(server_prepocty.PrepocetSkladu(), LOGDIR().."prepocet_skladu.log") end
if PREPOCITAT.Zakazky then server_prepocty.SaveLog(server_prepocty.PrepocetZakazek(nil, nil, 'zakazky_zakazky.Datum>CURRENT_TIMESTAMP-360'), LOGDIR().."prepocet_zakazek.log") end
if PREPOCITAT.Insolvence then server_prepocty.SaveLog(server_prepocty.InsovRejstrik(), LOGDIR().."insolv_rejstrik.log") end
if PREPOCITAT.Dluhy then server_prepocty.SaveLog(server_prepocty.AktualniDluh(), LOGDIR().."aktualni_dluh.log") end
if PREPOCITAT.UkolyTerminZMilniku then server_prepocty.SaveLog(server_prepocty.TerminZMilniku("ukoly_ukoly.IDDruh='auta'"), LOGDIR().."ukoly_terminzmilniku.log") end
if PREPOCITAT.CleanLogs then server_prepocty.SaveLog(server_prepocty.CleanLogs(), LOGDIR().."mazani_logu.log") end
if PREPOCITAT.PrehledVysledku and cf.MinMaxDate(os.time(), "mesic").MAX == cf.ExtractDate(os.time()) then --posledni den v mesici
  server_prepocty.SaveLog(server_prepocty.PrehledVysledku(), LOGDIR().."prehled_vysledku.log")
end
print(string.format("%s %s hod server_prepocty KONEC_OK", osex.date(), osex.date("!%H:%M", os.time()-server_prepocty.StartAll)))

Automatické spuštění v zadaném čase lze zajistit následujícím způsobem:

Cron pro Linux

Ve většině distribucí postačuje vytvořit linku na spouštěcí skript prepocet.sh v adresáři /etc/cron.daily

soubor v /etc/cron.d/obis - nezapomenout práva: chmod 644 /etc/cron.d/obis

MAILTO=support-fixme@domain.cz
SCRIPTSDIR=/home/obis/obis5/user/scripts
00 01 * * * obis $SCRITPSDIR/prepocet.sh

nebo nastavit crontab -e pro uzivatele obis

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h  dom mon dow   command
05 22 * * * /home/obis/obis5/user/scripts/prepocet.sh
04 * * * * /home/obis/obis5/user/scripts/backup-firebird.sh 3
03 03 * * * /home/obis/obis5/user/scripts/backup-firebird.sh 2
03 02 * * 7 /home/obis/obis5/user/scripts/backup-firebird.sh 1
01 01 1 * * /home/obis/obis5/user/scripts/backup-firebird.sh 0

At pro Windows

Pro windows 2000 a vyšší lze použít příkaz at.

at 23:00 /EVERY:M,T,W,Th,F o:\obis4\scripts\prepocet.cmd

Pro českou verzi windows je nutné psát názvy dnů česky s diakritikou.

at 23:00 /EVERY:Pondělí,Úterý,Středa,Čtvrtek,Pátek o:\obis4\scripts\prepocet.cmd

V případě problémů můžete spustit cmd s parametrem interactive a v konzoli pak vyzkouset spusteni skriptu rucne:

at 13:30 /INTERACTIVE cmd

Roční uzávěrka dat na serveru

Uzávěrku lze spustit nevizuálně na serveru přes noc na ostrých datech dle následujících skriptů:

scripts/uzaverka.sh

#!/bin/bash
ROOTDIR=/home/common/obis4
export DBCHARSET=UTF8
export LANG="cs_CZ.utf8"
 
cat <<EOF | $ROOTDIR/bin/obiscserver -notrigger -noxmlrpc -stdin | tee $ROOTDIR/log/uzaverka.log
Login Admin "hesloadmin" data
<EOF/>
Program "dofile(VLUADIR()..'/server/v_uzaverka.lua')"
<EOF/>
Exit
<EOF/> 
EOF

user/lua/server/v_uzaverka.lua

dofile(LUADIR().."debug.lua")
DEBUG.Init({typ={"detail", "novisible", "strict"}})
 
dofile(LUADIR().."server/server_prepocty.lua")
dofile(LUADIR().."common/common_uzaverka.lua")
 
res = {
Datum = cf.UnixTime("31.12.2010 23:59:59"),
BackupPredUzaverkou = "1", BackupPoInventure = "1", BackupPoUzaverce = "1", Password = "HESLO_PRO_SYSDBA",
Sklad = "1", Prepocet = "1", IgnoreErrorSklad = "0", DatumSklad = "",
Denik = "1", DruhDenik = "", UzaverkaDruh = "uz", OtevreniDruh = "ot", DatumDenik = "",
Faktury = "1", DatumFaktury = "",
Vykony = "1", DatumVykony = "",
CleanLogs = "1", DatumCleanLogs = "",
}
 
server_prepocty.SaveLog(common_uzaverka.AllData(res, ClientSession:GetNotify()), LOGDIR().."uzaverka-dat.log")
print(string.format("%s server_prepocty KONEC_OK", os.date()))

Odesilani emailu na serveru z modulu dokumenty

Vytvořit uživatele Mailer s právy RIE pro dokumenty_*

version=3
*.faktury_*=n
*.zakazky_*=n
*.ucto_*=n
*.prost_*=n
*.rozpocty_*=n
*.partneri_*=n
*.sklad_*=n
*.majetek_*=n
*.dokumenty_*=ried
*.ukoly_*=n
analyza=n
kalendar=n

globaloption=R

Změnit případně v user/obis.lua globální proměnou SMTPSERVER

SMTPSERVER={server="localhost", user=nil, password=nil, domain=nil}

Nahrát a nastavit linku lualib5.1/lib/x86_64-Linux

  • rozbalit v obis5: tar -xzvf lualib51.tgz
  • nastavit linku podle verze Linuxu, typicky: cd obis5/lualib5.1/lib; ln -s x86_64-Linux:libssl-1.0 x86_64-Linux
  • pokud je stará verze lualib5.1 nevrací se status odeslání - aktualizovat lualib

Vytvořit etc-daemons/obisrc.xml a samostatne licence-daemons.fdb

scripts/setenv.sh

/etc/cron.d/obis

*/5 7-18 * * * obis $SCRIPTSDIR/sendmail.sh
55 6 * * * obis $SCRIPTSDIR/sendmail.sh || echo "chyba sendmail.sh"

scripts/sendmail.sh

#!/bin/sh
 
if [ "$1" = "" ]; then
 . `dirname $0`/setenv.sh
else
 . $1
fi
 
CONFIGDIR=$ROOTDIR/etc
#CONFIGDIR=$ROOTDIR/etc-daemons
 
USER=Mailer
PASSWORD=$MAILERPASS
 
PID=sendmail.pid
LOG=sendmail.log
CONDEBUG=sendmail.condebug
DEBUG="-debug 2 -log $LOGDIR/$CONDEBUG"
 
pgrep -f $PID
if [ $? -eq 0 ]; then
  ps ax | grep $PID
  echo nelze spustit $0 - jiz bezi
  exit 1
fi
 
#prvni parametr dokumenty_dokumenty.SendMailDruh je druh dokumentu, ktery se prohlizi a odesila automaticky emailem
cat <<EOF | $ROOTDIR/bin64/obiscserver $DEBUG -configdir $CONFIGDIR -savepid $LOGDIR/$PID -notrigger -noxmlrpc -stdin -documentdir $DOCUMENTDIR >$LOGDIR/$LOG.daily 2>&1
Login $USER $PASSWORD $DATANAME
<EOF/>
Program "osex.dofile(LUADIR()..'debug.lua');DEBUG.Init();dokumenty_dokumenty.SendMailDruh('zmenyukolu', 'smtp', DEBUG);dokumenty_dokumenty.SendMailDruh('triggers', 'smtp', DEBUG);dokumenty_dokumenty.SendMailDruh('kontrola', 'smtp', DEBUG)"
<EOF/>
Exit
<EOF/>
EOF
 
STATUS=$?
if [ $STATUS -ne 0 ]; then
  echo "--- EXIST STATUS $STATUS" >> $LOGDIR/$LOG.daily
  echo "--- CONDEBUG"
  cat $LOGDIR/$CONDEBUG
  echo "--- STDOUT"
  cat $LOGDIR/$LOG.daily
fi
echo `date` >> $LOGDIR/$LOG
cat $LOGDIR/$LOG.daily >> $LOGDIR/$LOG
exit $STATUS

/etc/logrotate.d/obis

/home/obis/obis5/log/sendmail.log {
        su obis users
        weekly
        rotate 6
        compress
        missingok
        notifempty
        size 100M
}

Testovani: logrotate -v –force /etc/logrotate.d/obis

Kontrolní SQL dotazy a reporty emailem na serveru

Uživatelský kód kontrol je v adresáři user/lua/server/v_kontrola.lua Ten vytváří dokumenty typicky v druhu "kontrola", který se pak následně odesílá scriptem sendmail.sh (viz. výše)

Spuštění je pak pomocí /etc/cron.d/kontrola:

# m h dom mon dow user  command
#napr. kazdy patek v 9:00
0 9 * * 5   obistest  /home/common/obis5/user/scripts/kontrola.sh weekly

Fonty potřebné pro tvorbu dokumentů na serveru

apt-get install ttf-mscorefonts-installer fontconfig-config

Skript kontrola.sh:

INTERVAL=$1
 
. `dirname $0`/setenv.sh  #lze nacist promenne z pomocneho souboru setenv spolecneho pro dalsi skrity
 
USER=Cron
PASSWORD=$CRONPASS
 
LOGDIR=$ROOTDIR/log
PID=kontrola-$INTERVAL.pid
LOG=kontrola-$INTERVAL.log
CONDEBUG=kontrola-$INTERVAL.condebug
DEBUG="-debug 2 -log $LOGDIR/$CONDEBUG"
 
pgrep -f $PID
if [ $? -eq 0 ]; then
  ps ax | grep $PID
  echo nelze spustit $@ - jiz bezi
  exit 1
fi
 
 
cat <<EOF | $ROOTDIR/bin64/obiscserver $DEBUG -savepid $LOGDIR/$PID -notrigger -noxmlrpc -stdin -documentdir $DOCUMENTDIR >$LOGDIR/$LOG.daily 2>&1
Login $USER $PASSWORD $DATANAME
<EOF/>
Program "osex.dofile(LUADIR()..'debug.lua');DEBUG.Init();cf.trydofile(VLUADIR()..'server/v_kontrola.lua');v_kontrola.$INTERVAL()"
<EOF/>
Exit
<EOF/>
EOF
 
STATUS=$?
if [ $STATUS -ne 0 ]; then
  echo "--- EXIST STATUS $STATUS" >> $LOGDIR/$LOG.daily
  echo "--- CONDEBUG"
  cat $LOGDIR/$CONDEBUG
  echo "--- STDOUT"
  cat $LOGDIR/$LOG.daily
fi
echo `date` >> $LOGDIR/$LOG
cat $LOGDIR/$LOG.daily >> $LOGDIR/$LOG
exit $STATUS

Nejsou na server TruType fonty

zkopirovat na server slozku /usr/share/fonts/truetype/

progs/obiscserver.1588249267.txt.gz · Poslední úprava: 2020/04/30 12:21 autor: Karel Petrů