ГЛАВА 7 УПРАВЛЕНИЕ ПЕЧАТАЮЩИМ УСТРОЙСТВОМ СОДЕРЖАНИЕ ВВЕДЕНИЕ 00 Как работает система спулинга 00 АДМИНИСТРАТИВНЫЕ КОМАНДЫ 00 /usr/lib/lpadmin 00 /usr/lib/lpsched 00 /usr/lib/lpshut 00 /usr/lib/lpmove 00 /usr/lib/accept 00 /usr/lib/reject 00 ИНТЕРФЕЙСНЫЕ ПРОГРАММЫ ПРИНТЕРА 00 Стандартные интерфейсные программы 00 Написание интерфейсных программ 00 ФАЙЛЫ И КАТАЛОГИ 00 /usr/spool/lp/FIFO 00 /usr/spool/lp/default 00 /usr/spool/lp/log 00 /usr/spool/lp/oldlog 00 /usr/spool/lp/outputq 00 /usr/spool/lp/pstatus 00 /usr/spool/lp/qstatus 00 /usr/spool/lp/seqfile 00 /usr/spool/lp/class 00 /usr/spool/lp/interface 00 /usr/spool/lp/member 00 /usr/spool/lp/model 00 /usr/spool/lp/request 00 Файлы-замки 00 Очистка регистрационных файлов 00 ВВЕДЕНИЕ Эта глава повествует о работе системы спулинга; о том, где найти инструкции по установке печатающего устрой- ства; о командах, используемых администратором системы; об интерфейсных программах принтера; о файлах и каталогах системы спулинга. Сообщения об ошибках, выдаваемые системой спулинга описаны в Приложении B. Как работает система спулинга Термин spool является сокращением от английского "simultaneous peripheral output on-line" (одновременная печать в фоновом ре- жиме). Спулинг означает, что можно послать файл на печать, и продолжать работу в системе не дожидаясь результата. Система спулинга - это набор программ, которые: принимают файлы, которые пользователь желает напечатать управляют работой одного или более принтеров запускают программу, управляющую интерфейсом принтера (прин- теров) следят за состоянием заданий выдают сообщениуя об ошибках, когда возникают проблемы В дополнение к возможности посылать запросы системе спулинга, проверять состояние запросов, и отменять запросы, пользователю дана возможность приводить в рабочее состояние и останавливать принтер. В системе спулинга есть пять команд пользователя. Они перечис- лены ниже. Рис. 7-1. Команды пользователя для системы спулинга ~----------- -------------------------------------------------- │ Команда │ Описание │ ----------- -------------------------------------------------- │ enable(1) │ Активирует указанный принтер(ы) │ ----------- -------------------------------------------------- │ cancel(1) │ Отменяет запрос на печать данного файла │ ----------- -------------------------------------------------- │ disable(1)│ Останавливает работу указанного принтера │ │ │ (принтеров) │ ----------- -------------------------------------------------- │ lp(1) │ Посылает файл или файлы на печать │ ----------- -------------------------------------------------- │ lpstat(1) │ Печатает состояние системы спулинга │ ----------- -------------------------------------------------- АДМИНИСТРАТИВНЫЕ КОМАНДЫ Особый набор команд, используемых администратором, показан на рис. 7-2. Эти команды находятся в каталоге /usr/lib. Если вы будете использовать эти команды часто, удобнее включить назван- ный каталог в переменную PATH. Чтобы использовать команды адми- нистратора нужно войти в систему с именем root или lp. lp - это системное имя (см. гл. 1 и процедуру 1.4 для информации об ус- тановке пароля для этого имени). Рис. 7-2. Административные команды системы спулинга ~-------------------------------------------------------------- │ Команда Описание │ ---------------------- --------------------------------------- │/usr/lib/accept(1M) │ Допускает установку запросов на │ │ │ выполнение заданий в очередь к описан-│ │ │ ному устройству. │ ---------------------- --------------------------------------- │/usr/lib/reject(1M) │ Не допускает установки очереди для за-│ │ │ даний. │ ---------------------- --------------------------------------- │/usr/lib/lpadmin(1M) │ Устанавливает или меняет режим работы │ │ │ принтер │ ---------------------- --------------------------------------- │/usr/lib/lpmove(1M) │ Переадресует запросы на печать с одно-│ │ │ го устройства на другое. │ ---------------------- --------------------------------------- │/usr/lib/lpsched(1M) │ Запускает планировщик системы печати. │ ---------------------- --------------------------------------- │/usr/lib/lpshut(1M) │ Останавливает планировщик. │ ---------------------- --------------------------------------- На рис. 7-2 административные команды расположены в том же по- рядке, как они описаны в Справочнике администратора. В последу- ющих разделах команды описаны в том порядке, как они обычно ис- пользуются. Описание команд и примеры Команда /usr/lib/lpadmin Команда lpadmin(1M) используется для включения нового принтера в систему, описания классов принтеров для указания или замены устройства вывода, используемого по умолчанию, а также для опи- сания используемых интерфейсных программ. Команда lpadmin не может использоваться во время работы планировщика lpsched(1M), если не указана опция -d. Одна (и только одна) из следующих трех опций, может присутство- вать в командной строке при использовании команды lpadmin. -d[dest] -xdest -pprinter -pprinter Никакие другие опции не могут использоваться вместе с -d и -x. Много аргументов может быть использовано с опцией -pprinter, и по крайней мере один аргумент должен всегда присутствовать. Оп- ция -p указывает принтер, к которому обращаются остальные аргу- менты. Если printer не существует, то он создается. Аргументы, используемые вместе с -p, следующие: -cclass Этот аргумент приписывает указанный принтер к данному классу. -eprinter Этот аргумент позволяет использовать существую- щую интерфейсную программу для нового принтера, который Вы подключаете к системе спулинга. Ког- да Вы выбираете этот аргумент, интерфейсная программа для принтера, указанного этим аргу- ментом, копируется для принтера, указанного с опцией -p. -h Если добавляется новый принтер, этот аргумент означает, что данный принтер подключен к Вашему компьютеру. -iinterface Используется для описания новой интерфейсной программы для принтера, указанного в опции -p. interface - это маршрутное имя новой программы. -l При подключении нового принтера, этот аргумент означает, что устройство, связанное с этим принтером, является терминалом. -mmodel Несколько "моделей" интерфейсных программ есть среди программных средств системы спулинга. Эти стандартные интерфейсные программы обслуживают некоторые обычные принтеры, которые могут быть использованы с компьютером. Данный аргумент ис- пользуется, чтобы выбрать стандартную интер- фейсную программу, которую Вы хотите использо- вать с принтером, подключаемым к спулинговой системе. -rclass Этот аргумент используется для удаления принте- ра из указанного класса. -vdevice Используется, когда новый принтер подключается к спулингу. Он связывает принтер с файлом сис- темы UNIX с именем, указанным как device. Необ- ходимо задать полное маршрутное имя файла. Опция -d[dest] используется для описания существующего систем ного устройства вывода как нового системного устройства вывода, используемого по умолчанию. Если dest не указано, вывода по умолчанию не будет. Опция может использоваться и во время рабо- ты планировщика. Вывод по умолчанию используется чтобы узнать, куда посылается файл, указанный пользователем в команде lp (предполагается, что пользователь не определяет выходное уст- ройство в командной строке и переменная окружения LPDEST пус- та). Выходное устройство должно существовать. Чтобы удалить выходное устройство (dest) в команде lpadmin ис- пользуется опция -xdest. Эта опция не может быть использована во время работы планировщика. Если он работает, введите команду lpshut перед lpadmin. Примеры команд Примечание В примерах 2-7 считается, что планировщик уже останов- лен. Это осуществляется с помощью команды lpshut(1M). Пример 1 не требует остановки работы планировщика, пос- кольку в команде lpadmin употреблена лишь опция -d. Пример 1 Сделать принтер dqp10_1 системным устройством вывода по умолча- нию. # lpadmin -ddqp10_1 # Пример 2 Подключить новый принтер с именем dqp10_2 и соединить с устрой- ством /dev/tty11. Использовать стандартную интерфейсную прог- рамму для dqp10. # lpadmin -pdqp10_2 -v/dev/tty11 -mdqp10 # Если Вы только подключили новый принтер, он находится в бездей- ствии и не принимает запросов. Пример 3 Соединить принтер с именем lp1 с устройством /dev/tty13. Доба- вить lp1 к новому классу cl1, и использовать ту же интерфейсную программу, которая используется для принтера lqp40_1. # -v/dev/tty13 -elqp40_1 -ccl1 # Пример 4 Заменить интерфейсную программу для принтера lp1 на стандартный интерфейс принтера dqp10. # lpadmin -plp1 -mdqp10 # Пример 5 Отнести принтер -pdqp10_2 к классу cl1: # lpadmin -pdqp10_2 -ccl1 Принтеры, которые добавляются в класс, упорядочиваются согласно тому, в какой последовательности они добавляются. Например, до- доступ ко всем трем принтерам, и запрос послан классу cl1, то выполнять его будет lp1. Если все три принтера заняты, то вы- полнять запрос будет первый освободившийся принтер. Пример 6 Удалить принтеры lp1 и lp2 из класса cl1 : # lpadmin -plp1 -rcl1 # lpadmin -plp2 -rcl1 # Пример 7 Выходное устройство (класс или принтер) не может быть удалено, если у него есть ожидающие выполнения запросы. Ожидающие запро- сы могут быть отменены командой cancel(1) или переданы другим выходным устройствам командой lpmove(1) перед тем, как будет удалено данное выходное устройство. Удаление последнего члена класса вызывает уничтожение класса. Если удаленное устройство вывода является используемым по умол- чанию, то в системе уже не будет устройства, используемого по умолчанию. Однако, уничтожение класса не вызовет удаления вхо- дящих в него принтеров. # lpadmin -xlp3 # Команда /usr/lib/lpsched Команда lpsched(1M) запускает планировщик принтера. Планировщик берет задание, которое стоит первым в очереди запросов, и "вру- чает" его соответствующей интерфейсной программе для печати на принтере. Планировщик хранит последовательность прохождения за- даний и, по окончании выполнения задания, он берет следующий запрос из очереди и повторяет этот процесс. Во время работы планировщика, задания, запрошенные командой lp, будут распеча- тываться. Если планировщик не работает, они распечатываться не будут. Планировщик запускается автоматически каждый раз при включении системы. Это происходит посредством выполнения файла с именем lp из каталога /etc/rc.d. Файл lp создается при установке сис- темы спулинга. Каждый раз при запуске планировщика, команда lpsched создает файл с именем SCHEDLOCK в каталоге /usr/spool/lp. Пока сущест- вует файл SCHEDLOCK система не позволит запустить никакой дру- гой планировщик. Если планировщик остановлен при нормальных ус- ловиях, т.е. либо командой lpshut либо другой процедурой оста- нова, файл SCHEDLOCK удаляется. Однако, если работа системы за- вершилась аварийно, файл SCHEDLOCK может оказаться не удален- ным. Для полной уверенности в том, что этот файл не существует, в /etc/rc.d/lp есть команд удаления SCHEDLOCK, которую следует выполнить, перед тем как пытаться запустить планировщик. Эта команда вводится без аргументов. # lpsched # Обратите внимание, что команда не дает Вам знать, запущен ли планировщик. Чтобы удостовериться в этом, используйте команду lpstat с опцией -r. # lpstat -r scheduler is running # Примечание Если в очереди на выполнение находится много заданий, то вероятна задержка перед тем, как lpstat ответит, что планировщик работает. Команда /usr/lib/lpshut Две из трех опций команды lpadmin (-x и -p) не могут выполнять- ся при работающем планировщике. Команда lpshut останавливает планировщик и прекращает всю печать. Все запросы, которые рас- печатались лишь частично, отпечатаются до конца, когда плани- ровщик будет снова запущен. Команда вводится без аргументов. # lpshut scheduler stopped # Команда /usr/lib/lpmove Возможно, Вам будет необходимо переслать запросы на печать с одного выходного устройства на другое. Например, если Ваш прин- тер отключен для ремонта, и Вы хотите переслать все запросы на печать на другое выходное устройство с работающим принтером. Это можно сделать командой lpmove. Учтите, что запросы на пе- чать, посылаемые на выходное устройство не имеющее принтера, не принимаются. Другое применение команды lpmove - выборочное перемещение зап- росов с одного выходного устройства на другое. Если это сде- лать, то lp не будет принимать запросы для старого выходного устройства (тот же эффект, как при команде reject). lpmove не работает при работающем планировщике. Общий вид команды lpmove следующий: lpmove requests dest requests -это идентификационные номера запросов (ID запросов) заданий, которые ожидают печати, а dest - выходное устройство, которому следует переслать эти запросы. Выходное устройство мо- жет быть принтером или классом принтеров. Примеры команд Пример 1 Переслать все запросы принтеру lp1 на принтер lp2. Пересылка запросов вызывает переименование всех ID с lp1-nnn на lp2-nnn. После пересылки запросов, lp не будет принимать запросы для lp1 (тот же эффект, как при выполнении команды reject lp1, которая описана ниже). # lpmove lp1 lp2 # Пример 2 Переслать запросы lp1-54 и lp2-55 принтеру dqp10_1 : # lpmove lp1-54 lp2-55 dqp10_1 total of 2 requests moved to dqp10_1 # Примечание Эти два запроса имеют теперь имена dqp10_1-54 и dqp10_1-55. Команда /usr/lib/accept Команда accept(1M) позволяет запросам заданий располагаться в очереди к указанному выходному устройству, которое является принтером или классом принтеров. Общий вид этой команды таков: accept destination(s) Пример команды Следующая команда разрешает принтеру dqp10_1 начать принимать запросы. # /usr/lib/accept dqp10_1 destination "dqp10_1" now accepting requests # Команда /usr/lib/reject Иногда бывает необходимо остановить пересылку запросов на вы- ходное устройство. Например, если принтер отключен для починки; или к выходному устройству скопилось в очереди слишком много запросов, и Вы захотите прекратить добавление в очередь новых запросов. Это делается с помощью команды reject(1M). После ввода команды reject, но пока работает принтер - запросы из очереди будут печататься. После устранения причины, привед- шей к отказу принимать запросы, команда accept разрешит прини- мать их снова. Общий вид команды reject следующий: reject [-r[reason]] destinations Опция -r позволяет информировать пользователей о том, почему данное выходное устройство не принимает запросов, reason - это краткое обьяснение причин этого. Если в этом сообщении более одного слова, заключите его в двойные кавычки ("). destinations - это принтеры, которые не принимают более запросов. Пример команды Приводится пример для принтера lqp40_1, который находится в ре- монте. Пока он не работает, нужно предотвратить пересылку ему запросов. # reject -r "принтер lqp40_1 в починке" lqp40_1 destination "lqp40_1" is no longer accepting requests # Пользователи, которые попытаются послать задание lqp40_1, полу- чат следующее сообщение: $ lqp -dlqp40_1 filename lp:can't accept requests for destination "lqp40_1" принтер lqp40_1 в починке $ ИНТЕРФЕЙСНЫЕ ПРОГРАММЫ ПРИНТЕРА Принтеры, используемые в системе спулинга, должны иметь интер- фейсные программы. Каждый запрос на печать, посылаемый командой lp проходит через интерфейсную программу принтера, перед тем как быть распечатанным. Используемая интерфейсная программа оп- ределяется командой lpadmin(1M). Стандартные интерфейсные программы Каждый тип принтера требует свою интерфейсную программу. Нес- колько таких стандартных программ включены в набор программных средств системы спулинга. Эти программы написаны как shell-про- цедуры, однако, они могут быть написаны как программы на Си или как любые другие выполняемые программы. Они помещаются в ката- лог /usr/spool/lp/model. Написаниe интерфейсных программ Если Ваш принтер не снабжен ни одной из стандартных интерфей- сных программ, то Вам придется написать ее самостоятельно. Shell-процедура интерфейсной программы для примитивного принте- ра показана на рис.7-3. Эта программа может быть взята за осно- ву при написании Ваших собственных интерфейсных программ. Когда планировщик пересылает запрос на печать принтеру, интер- фейсная программа может быть активизирована в каталоге /usr/ spool/lp следующим образом: interface/P id user title copies options file ... Р имя принтера id id запроса, присвоенное командой lp user входное имя пользователя, пославшего запрос title необязательный заголовок, определяемый поль- зователем copies число копий, запрошенное пользователем options список разделенных пробелами параметров, ко- торые зависят от принтера и определяются пользователем file полное маршрутное имя печатаемого файла При работе интерфейсной программы, ее стандартный ввод идет из /dev/null, а стандартный вывод и вывод при ошибке направляются на печатающее устройство. Интерфейсные программы форматируют выдачу в соответствии с указанными в команде аргументами. Если Вы хотите убедиться в том, что интерфейсная программа имеет верные режимы stty (характеристики терминала, такие как ско- рость передачи информации, параметры вывода), то это можно сде- лать командой вида: stty mode options <&1 Эта команда берет стандартный ввод для stty с устройства. Ниже приведен пример команды, устанавливающей скорость 1200 бод и некоторые из режимов, описанных ниже. stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1 Поскольку разные принтеры печатают разное число колонок, согла- суйте заголовок и конец интерфейсной программы с характеристи- ками Вашего принтера. После завершения печати интерфейсная программа остановится и выдаст код, характеризующий состояние печатаемого задания. Код завершения интерпретируется lpsched следующим образом : ~-------------- ----------------------------------------------- │ КОД │ ЗНАЧЕНИЕ ДЛЯ lpsched │ -------------- ----------------------------------------------- │ 0 │ Печать завершилась успешно │ -------------- ----------------------------------------------- │ от 1 до 127 │ В процессе печати возникли проблемы (напри-│ │ │ мер, слишком много непечатаемых символов). Это│ │ │ не повлияет на печать следующих заданий.Коман-│ │ │ да lpsched указывает пользователю с помощью│ │ │ mail(1), что при печати произошла ошибка. │ -------------- ----------------------------------------------- │ больше 127 │Такие коды зарезервированы lpsched для внутрен-│ │ │ него использования. Интерфейсная программа не│ │ │ может останавливаться с кодом завершения в│ │ │ этих пределах. │ -------------- ----------------------------------------------- Когда появляются неполадки, которые могут повлиять на печать следующих заданий, например, не работает программа-фильтр уст- ройства - будет лучше отключить принтеры, чтобы не пропали зап- росы на печать. Если работающий принтер отключен, интерфейсная программа может быть остановлена сигналом 15( см. kill(1) и signal(2)). Рисунок 7-3. # Пример интерфейсной программы для примитивного принтера # x="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "\014\c" echo "$x\n$x\n$x\n$x\n" banner "$2" echo "\n" user='grep "^$2:" /etc/passwd | line | cut -d: -f5' if [ -n "$user" ] then echo "User: $user\n" else echo "\n" fi echo "Reguest id; $1 Printer: 'basename $0'\n" date echo "\n" if [ -n " $3" ] then banner $3 fi copies=$4 echo "\014\c" shift; shift; shift; shift; shift files="$x" i=1 while [$i -le $copies ] do for file in $files do cat "$file" 2>&1 echo "\014\c" done i='expr $i + 1' done echo "$x\n$x\n$x\n$x\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" echo "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$x\n$x\n$x\n$x\n$x" echo "$x\n$x\n$x\n$x\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" echo "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" echo "$x\n$x\n$x\n$x\n$x\n$x\n$x\n$x\n" exit 0 ФАЙЛЫ И КАТАЛОГИ Этот раздел посвящен файлам и каталогам системы спулинга. /usr/spool/lp/FIFO FIFO - специальный файл, который все команды используют для по- сылки сообщений lpsched. Любая команда может писать в FIFO, но только lpsched может читать из него. /usr/spool/lp/default Этот файл содержит имя системного выходного устройства, исполь- зуемого по умолчанию. Если этот файл пуст или не существует, то у системы нет выходного устройства по умолчанию. /usr/spool/lp/log Задача файла log - хранить информацию о всей печати с того мо- мента, как был в последний раз запущен планировщик. Файл содер- жит имя пользователя, сделавшего запрос, id запроса, имя прин- тера на котором печатался запрос, а также дату и время начала печати. Все сообщения об ошибках, посылаемые lpsched, также за- писывается. Первая строка этого файла содержит время, когда был запущен планировщик. /usr/spool/lp/oldlog Файл oldlog содержит запись того, что было в файле log. Когда останавливается планировщик, файл log закрывается. Когда плани- ровщик запускается снова, информация, находящаяся в log, копи- руется в файл oldlog, и заводится новый файл log. Информация, находившаяся в файле oldlog до этого, стирается. Первая строка файла содержит время, когда был включен планировщик, последняя строка - время, когда планировщик был выключен. /usr/spool/lp/outputq Когда командой lp дается запрос на вывод, делается запись в указанный двоичный файл. Планировщик принимает запрос и переда- ет его соответствующей интерфейсной программе для печати. После завершения выполнения задания запрос удаляется, а планировщик берет следующий запрос из этого файла и отправляет его на пе- чать. В этом файле хранятся только запросы, сделанные после то- го, как планировщик был запущен в последний раз (при запуске планировщика этот файл очищается ). Данные в файле outputq могут быть изменены командами lpmove, lpsched и disable. Команды cancel, disable и lpsched могут по- метить элементы этого файла как "удаленные". Если запрос удален до того как закончилось выполнение задания, то данные остаются в файле. /usr/spool/lp/pstatus Двоичный файл pstatus хранит информацию о состоянии каждого принтера. Данные записываются в этот файл и удаляются из него командой lpadmin, они также могут быть изменены командами can- cel, enable, disable и lpsched. Когда команда lpstat употребля- ется с опцией -p, информация о состоянии принтера берется из этого файла. /usr/spool/lp/qstatus В этом двоичном файле хранится информация о том, принимает или не принимает запросы выходное устройство. Данные записываются в него и удаляются из него командой lpadmin, и могут быть измене- ны командами accept и reject. Koманда lpstat с опцией -o берет информацию о состоянии запроса из этого файла. /usr/spool/lp/seqfile Файл seqfile содержит порядковый номер id последнего запроса, который был присвоен командой lp. Порядковый номер присваивает- ся lp каждому запросу. Когда номер станет равным 9999, следую- щим будет номер 1. /usr/spool/lp/class Это каталог, содержащий по одному файлу для каждого определен- ного класса принтеров. (Имя файла совпадает с именем класса). В файле определяется каждый принтер, который относится к этому классу. Файлы классов создаются, уничтожаются и изменяются ко- мандой lpadmin. Каждый из этих файлов должен содержать по край- ней мере одно описание. /usr/spool/lp/interface Каталог, содержащий по одной выполняемой интерфейсной программе для каждого принтера в системе. Имена файлов совпадают с имена- ми соответствующих принтеров. Интерфейсная программа направляет свой стандартный вывод и вывод при ошибке на принтер. Интерфей- сные программы могут быть shell-процедурами или откомпилирован- ными программами на C. /usr/spool/lp/member Каталог, содержащий по файлу для каждого принтера. Имя файла совпадает с именем принтера. Каждый файл содержит маршрутное имя устройства, с которым связан принтер. /usr/spool/lp/model Kаталог, содержащий интерфейсные программы принтеров, которые есть среди программных средств системы спулинга. /usr/spool/lp/request Kаталог, содержащий подкаталоги для каждого выходного устройст- ва в системе. Имя подкаталога совпадает с именем выходного уст- ройства. Когда делается запрос командой lp, в подкаталоге вы- ходного устройства, которому направлен запрос, создается файл request (или файл "r") и, в большинстве случаев, файл data (или файл "d"). Файл data хранит файл, направляемый на печать, пока планировщик не будет готов печатать его. Файл data не создает- ся, если печатаемый файл не может быть помещен в требуемый под- каталог. Имя файла request образуется из идентификационного номера зап- роса и имеет вид r-порядковый_номер. Имя файла data имеет вид dn-порядковый_номер, где n - неотрицательное целое число. Файлы request и data удаляются командами cancel и lpsched. Они могут пересылаться из одного подкаталога в другой командой lpmove. Файлы-замки Чтобы обеспечить исключительный доступ команд спулинга к файлам данных, в системе заводится несколько файлов-"замков". Это дво- ичные файлы, которые содержат идентификатор процесса, к которо- му осуществляется доступ. Файлы-замки и связанные с ними файлы данных следующие : ~------------- -------------- │ Файл-замок │ Файл данных │ ------------- -------------- │ OUTQLOCK │ outputq │ │ PSTATLOCK │ pstatus │ │ QSTATLOCK │ qstatus │ │ SEQLOCK │ seqfile │ ------------- -------------- Файлы-замки "умирают" через определенное время и могут быть удалены любым процессом спулинга. Команды, которые закрывают файл данных на больший чем этот интервал времени, должны изме- нить это значение в файле-замке. Создание, изменение и удаление файлов-замков производится автоматически процессами доступа к файлам. Еще один файл-замок SCHEDLOCK существует, когда работает плани- ровщик, чтобы удостоверить, что произведен только один вызов планировщика в данный момент. В отличие от других файлов-зам- ков, SCHEDLOCK не "умирает". Очистка регистрационных файлов Как описано выше, когда планировщик останавливается, файл log закрывается. Когда планировщик снова запускается, файл log ко- пируется в /usr/spool/lp/oldlog, а затем очищается. Если планировщик работает долгое время, и если у Вас много зап- росов на печать, файл log может вырасти до больших размеров. Вы сами можете удалить содержимое этого файла, либо можете дове- рить системе сделать это с помощью планировщика (см. "Контроль за растущими файлами и каталогами" в гл. 5 "Управление файловой системой"). Чтобы система очищала регистрационный файл, сделайте отметку в файле в каталоге /usr/spool/cron/crontabs. Один способ сделать это - войти в систему с именем root и использовать команду crontab(1). Другой способ состоит в непосредственном редактиро- вании файла в каталоге crontabs. Пример, приведенный ниже, показывает типичное использование ко- манды crontab. crontab добавляет данные, введенные пользовате- лем root, в каталог /usr/spool/cron/crontabs. # crontab -l 0 23 * * 5 /bin/su lp -c "cp /usr/spool/log /usr/ spool/lp/oldlog" 1 23 * * 5 /bin/su lp -c ">/usr/spool/lp/log" # Каждую пятницу в 11:00 cron(1M) выполняет эти команды. Сначала содержимое файла log копируется в oldlog, а затем log очищает- ся.