−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"
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: (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 "cf.trydofile(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 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 <<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 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/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 <<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, nil, {DeleteOlder=14}) dokumenty_dokumenty.SendMailDruh('triggers', 'smtp', DEBUG, nil, {DeleteOlder=14}) dokumenty_dokumenty.SendMailDruh('kontrola', 'smtp', DEBUG, nil, {DeleteOlder=14}) "<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 sleep 10 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/