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