====== 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/**