Linux и UNIX: программирование в shell. Руководство разработчика. - страница 16

стр.

Как и в случае с программой cron, пользователь root может контролировать, кому разрешено или запрещено выполнять команду at. Соответствующие списки пользователей содержатся в файлах at.allow и at.deny, находящихся в каталоге /etc.

Базовый формат команды at таков:

>at [-f файл] [-l -d -m] время


ОпцияНазначение
-f файлСписок заданий должен быть взят из указанного файла
-lВывод на экран списка заданий, которые ожидают выполнения; аналогична команде atq
-dУдаление задания с указанным номером; аналогична команде atrm (в некоторых системах заменяется опцией -r)
-mВыдача пользователю электронного сообщения о завершении задания
времяСпецификация времени, когда будет выполнено задание. Эта спецификация может быть довольно сложной. Допускается указание не только времени в формате часы: минуты, но и даты, а также многочисленных ключевых слов, таких как названия дней недели, месяцы, наречий today (сегодня), tomorrow (завтра), now (сейчас) и др. Наиболее удобна запись вида now + 3 hours (через три часа).

3.2.1. Запуск команд и сценариев с помощью команды at

Текст задания можно передать команде at двумя способами: в файле или в режиме командной строки at. Если задание состоит из одной команды или двух — трех команд, объединенных каналом, то удобнее воспользоваться вторым способом. Для запуска сценариев интерпретатора shell предпочтительнее первый вариант.

В случае необходимости выполнить одиночную команду вызовите команду at, указав требуемое время. Отобразится приглашение at>. Введите свою команду, а затем нажмите [Enter] и [Ctrl+D]. Рассмотрим пример.

>$ at 21:10

>at> find / -name "passwd" — print

>at>

warning: commands will be executed using /bin/sh job 1 at 1999-05-05 21:10

Запись <ЕОТ> появляется после нажатия [Ctrl+D]. Теперь в 21:10 будет выполнена команда find, ищущая в системе файлы с именем passwd. Обратите внимание на то, что команда at присваивает заданию уникальный идентификатор 1. Результаты выполнения команды find будут направлены вам по электронной почте. Вот фрагмент соответствующего электронного сообщения:

>Subject: Output from your job 1

>/etc/passwd

>/etс/pam.d/passwd

>/etc/uucp/passwd

>/tmp/passwd

>/root/passwd

>/usr/bin/passwd

>/usr/doc/uucp-1.06.1/sample/passwd

Ниже приведены примеры корректного указания времени при вызове команды at:

>at 6.45am May 12 — 12–го мая в 6:45 утра

>at 11.10pm — в 23:10 (сегодня или завтра, если

>это время уже прошло)

>at now + 1 hour — через час at 9am tomorrow — завтра в 9:00 утра

>at 15:00 May 24 — 24 мая в 15:00 at 4am + 3 days — через 3 дня в 4:00 утра

Если необходимо запустить с помощью команды at файл сценария, укажите его имя после опции -f, как это сделано ниже:

>$ at 3.00pm tomorrow -f /apps/bin/db_table.sh

>warning: commands will be executed using /bin/sh job 8 at 1999-05-06 15:00

Сценарий db_table.sh будет выполнен завтра в 15:00. Передать задание команде at позволяет также команда echo? $ echo find /etc -name "passwd" — print | at now +1 minute

3.2.2. Просмотр списка запланированных заданий

Для того чтобы просмотреть полный список запланированных заданий, введите команду at -l или atq:

>$ atq

>   1. >1999-05-05 23:00 а

>   2. >1999-05-06 06:00 а

>   3. >1999-05-21 11:20 а

В первом столбце содержится идентификатор заданния, за ним следуют дата и время выполнения задания. В последнем столбце находится символ а, указывающий на то, что задание получено от команды at. Существует также команда batch, которая планирует выполнение задания в период наименьшей загруженности системы. Задания, полученные от этой команды, помечаются в выводе команды atq символом b.

Получив задание, команда at создает в каталоге /var/spoot/at файл, в который помещает текст задания и заносит текущие установки всех переменных среды:

>$ pwd

>/var/spool/at

>$ ls

>a0000200eb7ae4 a0000400ebd228 a0000800eb7ea4 spool

3.2.3. Удаление запланированного задания

Для удаления задания предназначена команда atrm (синоним команды at -d или at -r), имеющая следующий формат:

atrm номер_задания

Чтобы удалить задание, нужно сначала получить его идентификатор. Поэтому сначала введите команду at -1 и узнайте идентификатор интересующего вас задания, а затем выполните команду atrm: