====== 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\nProgram "print({...}) print(4)" 1 2 3\n\nExit\n\n' | bin/obiscserver -stdin -noxmlrpc -debug 5 Vadí-li Vám viditelné heslo, použijte **EncryptedLogin** echo 'EncryptedLogin Petr oVXwzb4= Data\n\nProgram LuaObj:Print("xxx")\n\nExit\n\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" pro heirloom-mailx se soubor s CRLF posle jako attachment je potreba pouzit: ''cat file | fromdos | mailx'' nebo: **apt-get install bsd-mailx; 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**: ([[:firebird:setenv|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 Program "cf.trydofile(VLUADIR()..'/server/v_server_prepocty.lua')" Exit 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 cat $LOGDIR/aktualni_dluh.log > /tmp/$$ [ -s /tmp/$$ ] && cat /tmp/$$ | mail -s "Dluhy" $MAILTO rm /tmp/$$ cat $LOGDIR/prepocet_skladu.log | egrep "^(CW:|W:|E:)" > /tmp/$$ [ -s /tmp/$$ ] && cat /tmp/$$ | mail -s "Chyby přepočtu 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 účtování" $MAILTO grep "nový záznam" $LOGDIR/insolv_rejstrik.log > /tmp/$$ [ -s /tmp/$$ ] && cat /tmp/$$ | mail -s "Nový záznam insolvence" $MAILTO rm /tmp/$$ egrep "^(CW:|E:)" $LOGDIR/import_kurzu.log > /dev/null Dále vytvořte a případně modifikujte v adresari obis5/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.) Pokud **přepočet zakázek** trvá dlouho, lze řešit významné zkrácení času přepočtu smazáním indexu **sklad_prijemky_3** (Datum). --dofile(LUADIR().."debug.lua") --DEBUG.Init({typ={"detail", "novisible", "strict"}}) cf.trydofile(LUADIR().."/server/server_prepocty.lua") local PREPOCITAT={ Denik=false, Sklad=true, Zakazky=true, PrikazyKontrolaZmenaZaplaceno=false, Insolvence=false, Dluhy=false, Kurzy=false, PrehledVysledku=false, UkolyTerminZMilniku=false, CleanLogs=true, CleanUkoly=true} 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.PrikazyKontrolaZmenaZaplaceno then server_prepocty.SaveLog(server_prepocty.PrikazyKontrolaZmenaZaplaceno(), LOGDIR().."prikazy_zaplaceno.log") end if PREPOCITAT.CleanLogs then server_prepocty.SaveLog(server_prepocty.CleanLogs(), LOGDIR().."mazani_logu.log") end if PREPOCITAT.CleanUkoly then server_prepocty.SaveLog(server_prepocty.CleanUkoly(), LOGDIR().."mazani_zmen_smazanych_ukolu.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 $SCRIPTSDIR/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 < Program "dofile(VLUADIR()..'/server/v_uzaverka.lua')" Exit 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 kanban=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} ** Kontrola lualib ssl** * ldd lualib5.3/lib/x86_64-Linux/ssl.so **scripts/[[firebird:setenv|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 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 sleep 5 #prvni parametr dokumenty_dokumenty.SendMailDruh je druh dokumentu, ktery se prohlizi a odesila automaticky emailem cat <$LOGDIR/$LOG.daily 2>&1 Login $USER $PASSWORD $DATANAME Program " osex.dofile(LUADIR()..'debug.lua');DEBUG.Init() dokumenty_dokumenty.SendMailDruh('zmenyukolu', 'smtp', DEBUG, nil, {DeleteOlder=14}) dokumenty_dokumenty.SendMailDruh('triggers', 'smtp', DEBUG, nil, {DeleteOlder=14}) dokumenty_dokumenty.SendMailDruh('kontrola', 'smtp', DEBUG, nil, {DeleteOlder=14}) " Exit 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 sleep 10 cat <$LOGDIR/$LOG.daily 2>&1 Login $USER $PASSWORD $DATANAME Program "osex.dofile(LUADIR()..'debug.lua');DEBUG.Init();cf.trydofile(VLUADIR()..'server/v_kontrola.lua');v_kontrola.$INTERVAL()" Exit 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/**