• Непосредственный вывод на печать данных в формате, отличном от 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. Получение файлов, предназначенных для записи на компакт-диск.
3. Создание образа диска с помощью mkisofsили другой подобной утилиты.
4. Запись образа на компакт-диск с помощью cdrecordили другой утилиты.
5. Удаление образа диска и файлов, из которых он был создан.
Описание разделяемого объекта, предназначенного для решения данных задач, выглядит следующим образом:
[cd-create]
path = /home/samba/cd-create
create mask = 0666
directory mask = 0777
read only = No
max connections = 1
preexec = /bin/rm -r %P/*
postexec = /usr/local/bin/create-cd %H %P %U
Параметр preexec решает первую задачу. Вторая задача решается с помощью обычных операций Samba. Для решения задач 3-5 предназначен сценарий /usr/local/bin/create-cd, указанный в качестве значения второго параметра. Код этого сценария приведен в листинге 7.1.
Читать дальше