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 $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

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.txt · Poslední úprava: 2020/07/07 15:45 autor: Karel Petrů
 
Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki