>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 является универсальным инструментом для соединения нескольких автоматизированных процессов. Однажды я должен был объединить несколько процессов и процедур для трех больших сетей. В каждой сети была своя система сопровождения псевдонимов, хостов и прочей административной информации. Разобравшись в процедурах для каждой сети, я построил Makefile для главных серверов этих сетей. Имена инструкций верхнего уровня были одинаковыми для всех трех сетей, но команды, которые они выполняли, для каждой сети были свои.
В мои стратегические планы входило создание нового главного сервера, который в конечном счете заменил бы все серверы, доставшиеся мне, так сказать, в наследство. Первоначально Makefile нового главного сервера просто вызывал команду make на трех главных серверах с помощью команды rsh (это было задолго до появления ssh). Затем я поочередно перенес инструкции на новый сервер. Вначале я решил, что новый главный сервер должен быть единственным источником информации для файла aliases. Я слил файлы aliases всех трех сетей и разместил результат на главном сервере. Протестировав его, я создал инструкции, которые копировали этот объединенный файл на прежние главные серверы так, словно это был их собственный файл. Я поступил аналогичным образом с каждым файлом и каждой базой данных.
Поскольку каждое изменение было незначительным и конкретным, я мог выполнять тестирование итеративно. Произведя буквально несколько сотен изменений, я добился того, что все серверы «пели в унисон». В этот момент мне не составило труда исключить старые главные серверы и поставить новый над всеми клиентами.
♠ Любой файл, автоматически копируемый на другие серверы, должен обязательно содержать в начале комментарий, информирующий других системных администраторов, откуда файл пришел и где его следует редактировать.
Вот комментарий, который я пишу:
># ЭТОТ ФАЙЛ СОПРОВОЖДАЕТСЯ НА СЕРВЕРЕ:
># server1.example.com
># Редактируйте его при помощи команды: xed file.txt
># Если вы отредактируете его на любом другом компьютере,
># он будет перезагружен. БУДЬТЕ ВНИМАТЕЛЬНЫ!
Поскольку в комментарии упоминается xed, я должен пояснить, что это такое. Есть несколько программ с именем xed, но эту конкретную программу можно найти по адресу http://www.nightcoder.com/code/xed. Она вызывает редактор, которым вы обычно пользуетесь ($EDITOR можно установить в vi, pico, emacs и т. д.), после того как заблокирует файл. Это обязательное условие для любого сайта, на котором один компьютер используют несколько системных администраторов. Если вы отслеживаете изменения в файле с помощью RCS, эта система зарегистрирует все попытки отредактировать файл. Вы получаете практически бесконечный откат и журнал, где записано, кто и что изменил. Если вы заметите, что последний месяц система ведет себя как-то странно, то проверьте, кто редактировал файл месяц назад. Будьте снисходительны: все мы допускаем ошибки.