W dniu 25 czerwca 2012 15:05 użytkownik Sławomir Paszkiewicz < paszczus@gmail.com> napisał:
Moglbys podeslac te zmiany w nodeedit.php jako patch, albo po prostu caly plik? dzieki ;-)
Coś takiego mam np.:
#################### nodeedit.php: #################### if($nodeinfo['mac'] != $nodeedit['mac']) { $subject = 'Zmienił się adres MAC komputera ('.$nodeedit['id'].')'; $body = 'Było: '.$nodeinfo['mac'].', zostało zmienione na: '.$nodeedit['mac']; $LMS->AddLogMessages($customerid, $subject, $body); $LMS->ZmianaMAC($nodeinfo['mac'], $nodeedit['mac'], $nodeinfo['ip']); } // najpierw zmieniamy maca pozniej IP, wiec do zmiany IP korzystamy juz z nowego MACa if($nodeinfo['ip'] != $nodeedit['ipaddr']) { $subject = 'Zmienił się adres IP komputera ('.$nodeedit['id'].')'; $body = 'Było: '.$nodeinfo['ip'].', zostało zmienione na: '.$nodeedit['ipaddr']; $LMS->AddLogMessages($customerid, $subject, $body); $LMS->ZmianaAdresuIP($nodeinfo['ip'], $nodeedit['ipaddr'], $nodeedit['mac']); } ####################
#################### LMS.class.php (Przykładowa funkcja): ####################
function ZmianaMAC($bylo='', $mabyc='', $adresip='') { $msgid = $this->DB->GetLastInsertID('messages'); $nodeid = $this->GetNodeIDByIP($adresip);
$data = ' # Zmieniamy MACa kompa o ID: '.$nodeid.' (MSGID: '.$msgid.') BYLMAC="'.$bylo.'" MABYC="'.$mabyc.'" ADRESIP="'.$adresip.'" if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then /usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP} RESTARTDHCP="tak" elif [ "`/usr/local/sbin/ipset -T WpuszczaneVoipy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set WpuszczaneVoipy." ]; then /usr/local/sbin/ipset -D WpuszczaneVoipy ${ADRESIP},${BYLMAC} /usr/local/sbin/ipset -A WpuszczaneVoipy ${ADRESIP},${MABYC} /usr/sbin/conntrack -D -s ${ADRESIP} RESTARTDHCP="tak" fi ';
$this->DB->Execute('UPDATE daemonconfig SET value = CONCAT(value, ?) WHERE id=XXX', array($data)); }
####################
Na końcu jak widać, treść skrypciku leci do instancji, która jest wyłączona. Skrypcik poniżej na routerze łączy się co 5min do tej instancji i sprawdza czy ma coś przeładować czy nie. Nie jest to idealne rozwiązanie, przy więcej niż jednym routerze, ale przy jednym działa.
#################### Skrypcik na routerze odpalany z crontaba #################### #!/bin/bash
# Połączenie z bazą user=`cat /etc/default/lmsd | grep "LMSD_DBUSER" | sed 's/^.*"(.*)"$/\1/g'` pass=`cat /etc/default/lmsd | grep "LMSD_DBPASS" | sed 's/^.*"(.*)"$/\1/g'` database=`cat /etc/default/lmsd | grep "LMSD_DBNAME" | sed 's/^.*"(.*)"$/\1/g'` host=`cat /etc/default/lmsd | grep "LMSD_DBHOST" | sed 's/^.*"(.*)"$/\1/g'` query_skip="mysql --skip-column-names -h $host -u $user --password=$pass -D $database -e"
DAWAJDANE=`$query_skip "SELECT value FROM daemonconfig WHERE id = 168"`
if [ -n "$DAWAJDANE" ]; then # Kasujemy liste rzeczy do zrobienia `$query_skip "UPDATE daemonconfig SET value = '' WHERE id=168"`
DATA=`date "+%Y.%m.%d-%H:%M:%S"` PLIK="/router/logi/individual_reload/${DATA}.sh" LOG="/router/logi/individual_reload/${DATA}.log" echo -e "$DAWAJDANE" > "$PLIK"
# Tylko raz restartujemy DHCP na końcu (jeśli jest kilka zmian na raz) cat << "STOP" >> "$PLIK" if [ "$RESTARTDHCP" = "tak" ] ; then /etc/init.d/lmsd reload "DHCP" fi if [ "$RESTARTHTB" = "tak" ] ; then /etc/init.d/lmsd reload "PreHTB HTB" fi if [ "$RESTARTHOSTS" = "tak" ] ; then /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP" fi STOP chmod +x "$PLIK" /bin/bash "$PLIK" > "$LOG" 2>&1
MSGID=`grep "(MSGID:" "$PLIK" | sed 's/^.*MSGID: (.*))$/\1/' | tr '\n' ', ' | sed 's/^(.*),$/\1/'` TIMESTAMP=`date "+%s"`
# Zaznaczamy, że zdarzenia zostały przeładowane `$query_skip "UPDATE messageitems SET lastdate = $TIMESTAMP, status = 2 WHERE id IN ($MSGID)"` fi ####################