Toto je starší verze dokumentu!
Obsah
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
- stáhnout lualib5.1: ftp://ftp.epos.cz/obis/firebird-clients/lualib51.tgz
- 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/