Итак, пару кроновых скриптов для автоматизации.
Для тех, кому нужен скрипт перезапуска dhcp, при изменении конфига:
#!/bin/bash
dhcpd_conf="/opt/traffpro/from_traffpro.conf"
last_change="/tmp/dhcpd_last_change.tmp"
current_stat=`stat -c %Y $dhcpd_conf`
l_stat=`cat $last_change`
if [ "$current_stat" == "$l_stat" ]
then
echo "$dhcpd_conf was not changed"
else
echo "$current_stat" > $last_change
/etc/init.d/dhcp3-server status | grep "dhcpd3 is running" && /etc/init.d/dhcp3-server force-reload || /etc/init.d/dhcp3-server restart
fi
Скрипт, который сам отслеживает изменения ip/mac адресов в базе биллинга, генерирует конфиг для dhcpd.conf и перезапускает сервис если надо (альтернатива экспорта dhcpd.conf в WEB админке):
#!/bin/bash
tmp_f="/tmp/hwdata"
hw_list="/tmp/hwlist"
db_list="/tmp/dblist"
hwip_list="/tmp/hwiplist"
dbip_list="/tmp/dbiplist"
tmp_dc="/opt/traffpro/from_traffpro.conf"
q="select clients.id, clients.login, clients_addr.addr_ip, addr_eth from clients, clients_addr, groups where clients.id=clients_addr.id and clients.delta!='2' and clients.delta!='4' group by clients_addr.addr_ip;"
rm -f $tmp_f $hw_list $db_list $hwip_list $dbip_list
touch $tmp_f
echo $q | mysql traffpro | grep -v "addr_ip"> $tmp_f
db_users=`cat $tmp_f|wc -l`
#hw_users=`grep "hardware ethernet" $tmp_dc| wc -l`
if [ "$db_users" == "0" ]
then
echo 'Mysql is not working! Please check it asap!'
exit 0
fi
#IP difference
grep "fixed-address" $tmp_dc | awk '{print $2}'| cut -d ";" -f 1 | sort -u > $hwip_list
cat $tmp_f| awk '{print $3}'| sort -u > $dbip_list
grep "hardware ethernet" $tmp_dc | awk '{print $3}' | cut -d ";" -f 1 | sort -u > $hw_list
cat $tmp_f| awk '{print $4}' | tr "[:upper:]" "[:lower:]" | sort -u > $db_list
if diff $hw_list $db_list && diff $hwip_list $dbip_list
then
echo "There are no new users. Exiting.."
exit 0
else
echo 'New user has been found'
fi
rm -f $tmp_dc
while read line
do
host=`echo "$line" | awk {'print $2'}|tr "[:upper:]" "[:lower:]"`
ip=`echo "$line" | awk {'print $3'}`
hwaddr=`echo "$line" | awk {'print $4'}|tr "[:upper:]" "[:lower:]"`
cat >> $tmp_dc <<HW_RULES
host $host {
hardware ethernet $hwaddr;
fixed-address $ip;
option host-name "$host";
ddns-hostname "$host";
}
HW_RULES
done < $tmp_f
rm -f $hw_list $db_list $tmp_f $hwip_list $dbip_list
/etc/init.d/dhcp3-server status | grep "dhcpd3 is running" && /etc/init.d/dhcp3-server force-reload || /etc/init.d/dhcp3-server restart
В отличии от вебадминосвкого экспорта, скрипт исключает пользователей со статусом "Отключен" из dhcp конфига.
Первый или второй скрипт добавляем в крон с нужной вам периодичностью.