Тайм-менеджмент для системных администраторов (Лимончелли) - страница 151

В файлах, имена которых оканчиваются на .done, нет ничего особенного. Это обычные файлы с меткой времени или флагом для имени.

Рассмотрим развернутый пример. Имеются два файла, подлежащие индексации после редактирования: aliases и access. Если хотя бы один из них проиндексирован заново, выдается команда перезагрузки Postfix. Кроме того, оба файла копируются на serveг2, если они были изменены. Наконец, команда cd /etc && make выполняется на server2 тогда и только тогда, когда на него был скопирован хотя бы один файл.

Будьте внимательны, создавая инструкции. Правильно указывайте параметры и применяйте команду touch к файлам *.done, если потребуется. Команда make выполнит лишь минимум работы, необходимый для обновления системы.

>#

># Makefile для server1

>#

>NEWALISES=/usr/sbin/newaliases

>PDIR=/etc/postfix

>POSTMAP=/usr/lосаl/postfix/sbin/postmap

>#

># "Команды" высокого уровня

>#

>all: aliases.done access.done reload_if_needed.done push

>push: push.done

>reload:

>postfix reload

>stop:

>postfix stop

>start:

>postfix start

>reload_if_needed.done: aliases.done access.done

>postfix reload

>touch reload_if_needed.done

>clean:

>rm — f \

>$(PDIR)/aliases.pag $(PDIR)/aliases.dir \

>$(PDIR)/access.dir $(PDIR)/access.pag \

>push.aliases.done push.access.done \

>reload_if_needed.done

>#

># Инструкции для конкретных файлов,

># которым требуется индексация/регенерация

>#

># Если aliases изменится, сгенерировать файлы. pag and.dir

>aliases.done: $(PDIR)/aliases.pag $(PDIR)/aliases.dir

>$(PDIR)/aliases.pag $(PDIR)/aliases.dir: $(PDIR)/aliases $(NEWALIASES)

># Если access изменится, сгенерировать файлы. pag and.dir

>access.done: $(PDIR)/access.dir $(PDIR)/access.pag

>$(PDIR)/access.dir $(PDIR)/access.pag: $(PDIR)/access $(POSTMAP) $(PDIR)/access

>#

># Копирование

>#

>push.done: push.aliases.done push.access.done

>ssh server2 "cd /etc && make"

>touch $@

>push.aliases.done: aliases.done

>scp $(PDIR)/aliases server2:$(PDIR)/aliases

>touch $@

>push.access.done: access.done

>scp $(PDIR)/access server2:$(PDIR)/access

>touch $@

Этот Makefile является для вас хорошей стартовой площадкой. Он довольно сложен, потому что нам нужна гарантия того, что Postfix перезагрузится, лишь когда это абсолютно необходимо.

Такой Makefile избавляет вас от необходимости помнить множество команд, в том числе те, которые необходимы для обновления конкретных файлов. Вы больше не боитесь забыть какую-то команду. Многие сложные процедуры теперь сводятся к двум шагам:

1. Отредактировать нужный файл.

2. Ввести команду make.

Команда make является универсальным инструментом для соединения нескольких автоматизированных процессов. Однажды я должен был объединить несколько процессов и процедур для трех больших сетей. В каждой сети была своя система сопровождения псевдонимов, хостов и прочей административной информации. Разобравшись в процедурах для каждой сети, я построил