Изменение конфига РЕЖИКА по времени
В стандартных настройках РЕЖИКа нет возможности изменять правила в зависимости от времени. Придется обходить этот недостаток. Подготовку к обходу разделим на два этапа. Для простоты восприятия считаем что РЕЖИК у нас уже установлен и настроен, и что мы просто добавляем или убираем секции целиком, а не изменяем их.
1. Выделяем основную часть redirector.conf и изменяемую. В примере основная часть заканчивается строкой "##<EOF>##". Все секции идущие после нее, добавляются или убираются сценарием запускаемым по crontab. Каждая секция записывается в отдельный файлик. Для удобства эти кусочки обзываем одним именем, например Section.part.conf, и раскладываем их по соответствующим папкам.
Например, "кусочек":
<PORNO>
ban_dir /usr/local/rejik/banlists/PORNO
url
http://10.100.1.1/cgi-bin/access-deny?P ... Y_URL=#URL#
#USER_IP=#IP#
#USER_LOGIN=#IDENT#
запишется в файл /usr/local/rejik/banlists/PORNO/Section.part.conf. Строки USER_IP и USER_LOGIN закоментированы, потому что я ими не пользуюсь.
2. Пишем такой скриптик rejik_reconf.sh:
#!/bin/sh
# Переходим в папку с программой
cd /usr/local/rejik
# имя файла конфигурации
conf_name=redirector.conf
# вырезаем c помощью awk основную часть конфига во временный файл
cat $conf_name | awk 'BEGIN { EndOfFile = 0 }
( EndOfFile ) { print "\n"; exit 0 }
{ EndOfFile = ( substr( $0, 1, 9 ) == "##<EOF>##" );\
print $0 }
' > $conf_name.temp
# заменяем файлы
mv $conf_name.temp $conf_name
# Проверяем наличие параметров, если имена секций не переданы — завершить работу
case $# in 0)
exit 0
;;
esac
# Для всех переданных наименований секций,
for sec in $@
do
# если такой файл есть
Section_part=banlists/$sec/Section.part.conf
if [ -f $Section_part ]
then
# добавить в конфиг секцию и три пустых строки после нее
cat $Section_part >> $conf_name
printf "\n\n\n" >> $conf_name
fi
done
# на всякий случай...
/usr/sbin/chown -R squid:squid /usr/local/rejik
В качестве параметров сценарию передаются наименования папок со списками.
На этом подготовительная часть заканчивается, можно писать правила в crontab-е.
0 8 * * 1-5 /usr/local/rejik/rejik_reconf.sh PORNO GAMES MEDIA && killall redirector
0 18 * * 1-5 /usr/local/rejik/rejik_reconf.sh && killall redirector
В примере в 8-00 с понедельника по пятницу rejik3_reconf.sh дописывает в основную часть три дополнительных секции: PORNO, GAMES, MEDIA. В конце рабочего дня, в 18-00 скрипт запускается без параметров, а значит в конфиге остается только основная часть.