Некоторые из описанных примеров реализуются чаще других. Ряд задач (например, задачи администрирования) создают потенциальную угрозу безопасности системы, поэтому соответствующие сценарии находят лишь ограниченное применение. Поэтому приведенные выше примеры — это не описания задач, которые должны быть решены с помощью сценариев
preexec
и
postexec
, а лишь демонстрация возможностей этих сценариев.
На заметку
Несмотря на то что вы можете задавать необходимые команды непосредственно в составе параметров
preexec
и
postexec
, гораздо удобнее оформлять команды в виде сценария оболочки и задавать сценарий в качестве значения соответствующего параметра. Это позволит вам выполнять в ответ на действия пользователей сколь угодно сложные операции.
В некоторых случаях возникает необходимость ограничить число пользователей, которые могут одновременно обращаться к разделяемому объекту. Это можно сделать с помощью параметра
max connections
. Чтобы полностью исключить одновременные действия пользователей, надо задать параметр
max connections = 1
. Однако такая конфигурация иногда создает нежелательные побочные эффекты, так как при обращении к разделяемым объектам с помощью Network Neighborhood и My Network Places соединения с разделяемыми объектами закрываются с некоторым опозданием.
Использование псевдопринтеров
Еще одну возможность использования сценариев предоставляет параметр
print command
, предназначенный для включения в описание разделяемого объекта печати. Первоначально этот параметр создавался для осуществления операций, связанных с передачей задачи на печать, но в качестве его значения можно задавать любые команды. Параметр
print command
позволяет выполнить специальную обработку PostScript-файлов и реализовать эффекты, имеющие лишь отдаленное отношение к выводу данных на печать. Этот параметр можно применять для обработки любых данных, содержащихся в файле, сгенерированном в системе Windows. Ниже приведены примеры задач, решаемых с помощью параметра
print command
.
• Передача факсов с помощью программного обеспечения Linux и PostScript-драйвера Windows. При этом даже можно воспользоваться Windows-программами, например, продуктом Respond (
http://www.boerde.de/~horstf/
) для создания интерфейса.
• Конвертирование PostScript-файлов в другие типы данных, например, представление их в виде PDF-файлов или преобразование в графический формат. Пример подобного использования параметра
print command
рассматривается ниже в этой главе.
• Непосредственный вывод на печать данных в формате, отличном от PostScript. Некоторые из таких данных корректно обрабатываются с помощью фильтров печати Linux, для них необходимость в создании специальной конфигурации не возникает, однако в ряде случаев применение
print command
вполне оправдано. Например, вы можете использовать данный параметр для обработки файлов, созданных с помощью текстового процессора, извлечения определенных полей из базы данных и выполнения других подобных действий.
• Объединяя данные в файл архива и передавая этот файл на компьютер под управлением Linux, вы можете решать задачи, подобные тем, которые решаются с помощью сценариев
preexec
и
postexec
. Вы можете создавать резервные копии файлов, преобразовывать
форматы и выполнять другие действия. Пример решения подобной задачи приведен ниже.
Подобно сценариям
preexec
и
postexec
, параметр
print command
позволяет выполнять действия, которые могут создавать угрозу безопасности системы. При решении задач, предполагающих подобные действия, будьте внимательны, особенно если вы используете параметр
force user
для предоставления специальных привилегий.
В составе параметра
print command
можно использовать переменные, приведенные в табл. 7.1 (некоторые из них, например
%s
, специально предназначены для такого применения, и их появление в составе сценариев
preexec
и
postexec
не оправдано). Переменная
%H
в особенности полезна при доставке данных пользователю, инициировавшему задачу; в частности, вы можете использовать эту переменную для указания пути к каталогу, в который должны быть помещены файлы после окончания обработки.
Параметр
print command
имеет существенное преимущество перед
preexec
и
postexec
. При взаимодействии с разделяемым объектом соединение может остаться открытым, в результате сценарий
postexec
долгое время не получит управления. Если же клиент инициирует задачу печати, команды, указанные в качестве значения
print command
, сразу же выполняются. Однако следует учесть, что при выполнении некоторых операций две последовательно переданные на печать задачи могут повредить друг другу файлы с данными.
Пример использования средств Linux для записи компакт-дисков
С помощью сценариев можно сконфигурировать сервер Samba как платформу для создания компакт-дисков. Предположим, что вы администрируете сеть небольшого офиса, к которой подключены десятки клиентских компьютеров. Предположим также, что в офисе имеется лишь одно устройство, позволяющее записывать компакт-диски. Время от времени у разных пользователей возникает необходимость записать информацию на компакт-диск. Вы можете подключить устройство записи к компьютеру, на котором выполняется сервер Samba, и предоставить всем желающим возможность использовать программное обеспечение Linux для создания компакт-дисков. Однако при этом возникнут проблемы. Во-первых, вам придется обучить пользователей работать с программами записи. Во-вторых, некоторые пользователи не будут удалять после окончания записи свои файлы, что приведет к нерациональному использованию дискового пространства. Сценарии Samba позволяют автоматизировать процесс записи и разрешить возникающие проблемы.
Использование сценариев preexec и postexec для записи компакт-дисков
Предположим, что вы решили выделить один из разделяемых объектов Samba для записи компакт-дисков. Этот объект не должен использоваться ни для каких других целей. Для создания компакт-диска с помощью сценариев
preexec
и
postexec
вам необходимо обеспечить выполнение следующих задач.
1. Удаление из разделяемого объекта всех файлов.
2. Получение файлов, предназначенных для записи на компакт-диск.