При запуске и остановке служб на сервере вызывается скрипт /app/xge/cfg/hooks с параметрами, сообщающими о том, какая служба была запущена или остановлена. Первый параметр - служба, второй 'start' или 'stop', третий параметр - код возврата от службы.
При помощи файла /app/xge/cfg/hooks можно делать нестандартные настройки сервера.
h2. В этом разделе приводятся примеры таких скриптов.
Отредактировать файл можно следуя инструкциям из этой статьи.
Изменения вносятся в середину скрипта, первую и последнюю строки оставьте неизменными. В общем виде скрипт должен выглядеть так.
{code}
#!/bin/bash
if [ "$1" = 'Имя_службы' -a "$2" = 'Параметр' ]; then
#Ваши изменения здесь
fi
exit 0
{code}
h3. С помощью hook файла можно писать свои правила в firewall (с помощью iptables)
h3. Пример. Проброс порта telnet
{code}
#!/bin/bash
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
iptables -t nat -I xge_pre -d 192.168.245.1 -p tcp --dport 23 -j DNAT --to-destination 192.168.1.3:23
fi
{code}
h3. Пример распределения прерываний сетевок лесенкой(если количество ядер равно числу очередей)
{code}
#!/bin/bash
nic_irq_ladder() {
local nic=${1}-TxRx-
local cpucount=$(grep -c 'model name' /proc/cpuinfo)
grep $nic /proc/interrupts | while read irq $(eval echo cpu{1..$cpucount}) t queue t; do
irq=${irq//:}
echo $irq $queue
echo "# really"
proc_entry=/proc/irq/$irq/smp_affinity_list
cat $proc_entry
echo "# eval"
evaled="${queue##*TxRx-}"
echo $evaled
echo $evaled > $proc_entry
done
}
if [ "$1" = "/etc/init.d/firewall" ]; then
nic_irq_ladder eth0
nic_irq_ladder eth1
fi
{code}
h3. Увеличение хеша для кеша маршрутов
{code}
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
echo 8 >/proc/sys/net/ipv4/route/gc_elasticity
fi
{code}
h2. Автоматизированное использование
Ничто не мешает использовать hooks с помощью cron. Таким образом вы можете выполнять некие команды не при наступлении какого-то события, а в нужное вам время.
Для этого нужно использовать в качестве имени службы:
* cron.10min \- для того чтобы выполнять что-то каждые 10 минут
* cron.daily \- для того чтобы выполнять что-то каждый день
* cron.hourly \- для того чтобы выполнять что-то каждый час
* cron.monthly \- для того чтобы выполнять что-то каждый месяц
* cron.weekly \- для того чтобы выполнять что-то каждую неделю
Либо /etc/crontab, если вам нужно указать специфичное время, но в таком случае указать в вызове в качестве имени службы что-то уникальное, например
{code}
10 */2 * * * root /cfg/hooks /etc/init.d/networkd start 1>/dev/null 2>/dev/null
{code}
При помощи файла /app/xge/cfg/hooks можно делать нестандартные настройки сервера.
h2. В этом разделе приводятся примеры таких скриптов.
Отредактировать файл можно следуя инструкциям из этой статьи.
Изменения вносятся в середину скрипта, первую и последнюю строки оставьте неизменными. В общем виде скрипт должен выглядеть так.
{code}
#!/bin/bash
if [ "$1" = 'Имя_службы' -a "$2" = 'Параметр' ]; then
#Ваши изменения здесь
fi
exit 0
{code}
h3. С помощью hook файла можно писать свои правила в firewall (с помощью iptables)
h3. Пример. Проброс порта telnet
{code}
#!/bin/bash
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
iptables -t nat -I xge_pre -d 192.168.245.1 -p tcp --dport 23 -j DNAT --to-destination 192.168.1.3:23
fi
{code}
h3. Пример распределения прерываний сетевок лесенкой(если количество ядер равно числу очередей)
{code}
#!/bin/bash
nic_irq_ladder() {
local nic=${1}-TxRx-
local cpucount=$(grep -c 'model name' /proc/cpuinfo)
grep $nic /proc/interrupts | while read irq $(eval echo cpu{1..$cpucount}) t queue t; do
irq=${irq//:}
echo $irq $queue
echo "# really"
proc_entry=/proc/irq/$irq/smp_affinity_list
cat $proc_entry
echo "# eval"
evaled="${queue##*TxRx-}"
echo $evaled
echo $evaled > $proc_entry
done
}
if [ "$1" = "/etc/init.d/firewall" ]; then
nic_irq_ladder eth0
nic_irq_ladder eth1
fi
{code}
h3. Увеличение хеша для кеша маршрутов
{code}
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
echo 8 >/proc/sys/net/ipv4/route/gc_elasticity
fi
{code}
h2. Автоматизированное использование
Ничто не мешает использовать hooks с помощью cron. Таким образом вы можете выполнять некие команды не при наступлении какого-то события, а в нужное вам время.
Для этого нужно использовать в качестве имени службы:
* cron.10min \- для того чтобы выполнять что-то каждые 10 минут
* cron.daily \- для того чтобы выполнять что-то каждый день
* cron.hourly \- для того чтобы выполнять что-то каждый час
* cron.monthly \- для того чтобы выполнять что-то каждый месяц
* cron.weekly \- для того чтобы выполнять что-то каждую неделю
Либо /etc/crontab, если вам нужно указать специфичное время, но в таком случае указать в вызове в качестве имени службы что-то уникальное, например
{code}
10 */2 * * * root /cfg/hooks /etc/init.d/networkd start 1>/dev/null 2>/dev/null
{code}