===== Blokování licencí ===== Po pádu obisu (např. z důvodu přerušení síťového připojení) mohou zůstat na serveru blokovány obis licence běžícími firebird procesy. Standardní timeout spojení na windows je 2 hodiny - po této době se proces automaticky zabije. Tuto dobu je možné zkrátit úpravou registrů pomocí [[http://technet.microsoft.com/en-us/library/cc782936(WS.10).aspx|nastavení TCP KeepAliveTime]]. ==== Nastavení doby detekce ukončeného klientského spojení ==== Doba ukončení spojení = KeepAliveTime + TcpMaxDataRetransmissions*KeepAliveInterval (defaultne 2hod) === Windows === [[https://technet.microsoft.com/en-us/library/dd349797(v=ws.10).aspx]] V registry \HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\ (doby v minisekundach) KeepAliveTime 7200000 -> 60000 (2hod -> 1min) KeepAliveInterval 1000 -> 10000 (1sec -> 10 sec) TcpMaxDataRetransmissions 5 === Linux === /etc/sysctl.d/local.conf (ubuntu: /etc/sysctl.d/60-local.conf) net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=10 net.ipv4.tcp_keepalive_probes=5 aktivace sysctl -f --system Aktualni hodnoty v kernelu tail /proc/sys/net/ipv4/tcp_keepalive_* (doby v sekundach) Zjisteni stavu socketu stav keepalive netstat -t --timer [keepalive|on|off] (6176,47/0/0) -> (a/b/c) * a=timer value (a=keepalive timer, when 1st field="keepalive"; a=retransmission timer, when 1st field="on") * b=number of retransmissions that have occurred * c=number of keepalive probes that have been sent ==== Ukončení procesů Firebirdu na windows ==== **Manuální zabití** Firebird procesů, které blokují licence je možné s pomocí [[http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx|TCPView od sysinternals]]. V licencích obisu se zjistí IP, které licence blokuje a v TCPView se zabije proces firebirdu, který má na toto IP spojení. Poté už půjde v licencích tyto konexe vymazat. ==== Skript na zabití procesů firebird vybrané stanice kill_fb.sh ==== #! /bin/bash #pomoci SSH (Putty) se prihlasit na server jako uzivatel ktery ma umoznene sudo na lsof a kill #a spustit tento script # IP adresa volajiciho pocitace CLIENT_IP=$(echo $SSH_CLIENT | awk '{print $1;}') || exit 1; FB_NAME="fb_inet_server" OPEN_DB="licence.fdb" for P in $(pgrep $FB_NAME); do # grepujeme pres vsechny otevrene soubory daneho procesu, hledame ten, ktery otevira licence a zaroven ma socket na IP adresu klienta. Grepujeme pre if sudo lsof -n -p $P 2>/dev/null | grep -z "$OPEN_DB" | grep -q "$CLIENT_IP"; then echo "Found process $P $FB_NAME holding DB $OPEN_DB and communicating with $CLIENT_IP, killing the process" sudo kill $P exit 0 fi done echo "No process $FB_NAME holding DB $OPEN_DB and communicating with $CLIENT_IP found" exit 1