... При запуске и остановке служб на сервере вызывается скрипт /app/xge/cfg/hooks с параметрами, сообщающими о том, какая служба была запущена или остановлена. Первый параметр - служба, второй 'start' или 'stop' ({color:#ff0000}кроме службы firewall.sh{color}), третий параметр - код возврата от службы. При помощи файла /app/xge/cfg/hooks можно делать нестандартные настройки сервера. h2. В этом разделе приводятся примеры таких скриптов. Отредактировать файл можно следуя инструкциям из этой статьи. Изменения вносятся в середину скрипта, первую и последнюю строки оставьте неизменными. В общем виде скрипт должен выглядеть так. {code} #!/bin/bash if [ "$1" = 'Имя_службы' ]; then : #Ваши изменения здесь fi exit 0 {code} либо так {code} #!/bin/bash if [ "$1" = 'Имя_службы' -a "$2" = 'Параметр' ]; then : #Ваши изменения здесь fi exit 0 {code} h3. Пример. Проброс telnet {code} #!/bin/bash if [ "$1" = "/etc/init.d/firewall" ]; 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" ]; 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}
|