URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7323
[ Назад ]

Исходное сообщение
"Скрипт добавления хостов в мониторинг Nagios"

Отправлено spetrov , 17-Апр-08 21:21 
Здравствуйте, уважаемые!

Стоит следующая задача:
Есть 2 файла (сделанные из одного посредством awk, так что если удастся упростить решение - будет замечательно)
файл ~/ip вида:
х.х.х.х
у.у.у.у
z.z.z.z
.......
и соответствующий ему файл ~/hosts вида:
site1.ru
site2.ru
site3.ru
........
Естественно, x.x.x.x соответсвует site1.ru

Есть необходимость создать скрипт, который будет создавать файлы конфига с названием вида х.х.х.х.cfg, если ему скармливать ~/ip и ~/hosts.
На данный момент оно выглядит так:
#!/bin/sh
for ip in `cat /home/spetrov/tmp/ip`
do
  echo "define host{
                    use                     generic-printer
                    host_name               $host
                    alias                   $host
                    address                 $ip
                    hostgroups              network
                   }

       define service{
                    use                     generic-service
                    host_name               $host
                    service_description     PING
                    check_command           check_ping!3000.0,80%!5000.0,100%
                    normal_check_interval   10
                    retry_check_interval    1
                   }"
done

for host in `cat /home/spetrov/tmp/hosts`
do
  echo "define host{
                    use                     generic-printer
                    host_name               $host
                    alias                   $host
                    address                 $ip
                    hostgroups              network
                   }

       define service{
                    use                     generic-service
                    host_name               $host
                    service_description     PING
                    check_command           check_ping!3000.0,80%!5000.0,100%
                    normal_check_interval   10
                    retry_check_interval    1
                   }"

done
echo
#> /home/spetrov/tmp/1/$ip.cfg

Так как в bash-программировании я новичок, не совсем понимаю, как мне вывести результат в файл


Содержание

Сообщения в этом обсуждении
"Скрипт добавления хостов в мониторинг Nagios"
Отправлено allez , 18-Апр-08 06:24 
>Так как в bash-программировании я новичок, не совсем понимаю, как мне вывести
>результат в файл

Это делается с помощью перенаправления вывода.


echo "Foo"              # вывод строки "Foo" на экран
echo "Foo" > foo.txt    # вывод строки "Foo" в файл foo.txt
echo "Boo" > foo.txt    # вывод строки "Boo" в файл foo.txt, прежнее содержимое файла теряется
echo "Blah" >> foo.txt  # добавление строки "Blah" в конец файла foo.txt, прежнее содержимое сохраняется

В вашем случае можно также перенаправить вывод не внутри скрипта, а при его запуске:

./script.sh > file.cfg


"Скрипт добавления хостов в мониторинг Nagios"
Отправлено phpcoder , 18-Апр-08 10:00 
Я бы сделал так:
- файл с адресами/хостами один, в формате "x.x.x.x yyyy.ru"
- файл-шаблон, в котором указаны специальные метки, которые позже будут заменены на адреса
- скрипт читает адрес/хост, заменяет эти данные в шаблоне и всё это сохраняет в файл.

Выглядит это примерно так:

[c0der@xxx ~]$ cat hosts.txt
х.х.х.х site1.ru
у.у.у.у site2.ru
z.z.z.z site3.ru
[c0der@xxx ~]$ cat generate_cfg.sh
#!/bin/sh

while read IP HOST; do
        echo "Generate config for site $HOST ($IP)..."
        sed "s|@IP@|$IP|;s|@HOST@|$HOST|" template.cfg >"$HOST.cfg"
done <hosts.txt

[c0der@xxx ~]$ cat template.cfg
define host {
        use                     generic-printer
        host_name       @HOST@
        alias           @HOST@
        address         @IP@
        hostgroups      network
}

define service {
        use                                             generic-service
        host_name                               @HOST@
        service_description             PING
        check_command                   check_ping!3000.0,80%!5000.0,100%
        normal_check_interval   10
        retry_check_interval    1
}

[c0der@xxx ~]$

Запускаем:

[c0der@xxx ~]$ ./generate_cfg.sh
Generate config for site site1.ru (х.х.х.х)...
Generate config for site site2.ru (у.у.у.у)...
Generate config for site site3.ru (z.z.z.z)...
[c0der@xxx ~]$ ls -l site*
-rw-r--r-- 1 coder coder 316 Апр 18 12:58 site1.ru.cfg
-rw-r--r-- 1 coder coder 316 Апр 18 12:58 site2.ru.cfg
-rw-r--r-- 1 coder coder 312 Апр 18 12:58 site3.ru.cfg
[c0der@xxx ~]$ cat site1.ru.cfg
define host {
        use                     generic-printer
        host_name       site1.ru
        alias           site1.ru
        address         х.х.х.х
        hostgroups      network
}

define service {
        use                                             generic-service
        host_name                               site1.ru
        service_description             PING
        check_command                   check_ping!3000.0,80%!5000.0,100%
        normal_check_interval   10
        retry_check_interval    1
}

[c0der@xxx ~]$

Если я правильно понял задачу, то это как раз, то что вам и требуется.


"Скрипт добавления хостов в мониторинг Nagios"
Отправлено spetrov , 18-Апр-08 16:26 
phpcoder, благодарю! Именно то, что нужно!

Попробовал еще кое-что таким же образом сделать. Вроде начал понимать. Спасибо.