Настройка и работа в Linux

         

"Жду ваших указаний"


Мы подробно рассмотрели что нужно сделать, чтобы компьютер периодически выполнял какие-то работы без нашего участия. А что, если нужно заставить его выполнить какую-то работу только один раз. Например, выключиться в полночь или еще что-нибудь в этом роде. Для таких случаев в Linux имеется еще один демон - atd, который, так же как и crond, постоянно находится "на посту". В этом вы можете убедиться, выполнив команду

[user] $ ps -ax | grep atd

Для того, чтобы задать работу этому демону, применяются команды at и batch.

Команда at в простейшем случае запускается с единственным параметром - временем выполнения задания:

[user] $ at TIME

После этого появляется следующее предупреждение: warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at>

и программа ожидает ввода вашего задания. В качестве задания может использоваться любая команда оболочки (в том числе скрипты). После завершения ввода команды надо нажать комбинацию клавиш [Ctrl-D]. В ответ вы увидите сообщение о том, что ваше задание принято под таким-то номером:

job 4 at 2002-09-26 12:15

Вы можете просмотреть очередь ждущих своего времени заданий с помощью команды atq (к сожалению, выводятся только номера ожидающих выполнения работ и время их выполнения, а содержание задания, то есть вызываемая команда, не выводится). Если вы не суперпользователь, вам будут показаны только ваши задания. Суперпользователь видит список заданий, введенных всеми пользователями системы. С помощью команды atrm вы можете удалить задание из этой очереди. Для этого надо указать его номер в качестве параметра команды atrm.

Посмотрим теперь как правильно задать время выполнения вашего задания, то есть правила формирования параметра TIME для команды at. В простейшем варианте указывается только час и минута запуска задания, разделенные двоеточием: "hh:mm". Можно указывать время "в американском стиле", добавив после минут окончание AM (до полудня) или PM (после полудня). Если сегодня указанное время уже прошло, задание будет выполняться завтра. Допускается прямо указать команде at, что задание должно быть выполнено сегодня (at 10:00PM today) или завтра (at 10:00PM tomorrow). Можно также указать дату выполнения задания в формате MMDDYY, или MM/DD/YY, или DD.MM.YY. Допускается использовать название месяца с числовым указанием дня и (необязательным) указанием года. При этом указание на время выполнения в течение заданного дня должно стоять перед указанием даты, например at 10:00PM Jul 31. Можно также указать программе at, что выполнение задания нужно повторить несколько раз. Для этого после указания времени добавляют количество повторений с указанием через какой интервал (час, день, неделя или месяц) надо повторить задание. Например, по команде at 10:00PM + 3 days задание будет выполняться в 10 вечера сегодня и еще в течение 3 дней в то же время. В общем, вариантов указания времени выполнения задания существует множество, их полная спецификация приведена в файле /usr/sharedoc/at-3.1.8/timespec (цифры 3.1.8 обозначают версию утилиты at и у вас могут быть другими).


Как и в случае с демоном crond, суперпользователь может лишить некоторых пользователей права запускать команду at, прописав их имена в специальный файл /etc/at.deny, либо же разрешить использовать at только тем пользователям, имена которых перечислены в файле /etc/at.allow. Причем оболочка сначала ищет файл /etc/at.allow и, если он есть, проверяет наличие вашего имени в нем. Второй файл уже не анализируется. Если же файла /etc/at.allow не существует, проверяется /etc/at.deny, и вам разрешается выполнить at, если ваше имя в этом файле не встречается. Если ни того, ни другого файла не существует, программу at может запускать только суперпользователь. В Red Hat Linux по умолчанию создается пустой файл /etc/at.deny, то есть давать задания демону atd могут все пользователи.

Кроме выполнения заданий в указанное время демон atd может выполнять какие-то работы в периоды низкой загруженности системы. Задания на этот случай формулируются с помощью утилиты batch и ждут своего часа в очереди. Когда загрузка системы снизится до уровня, указанного параметром -l (задается при запуске atd, по умолчанию равен 0.8), задания из очереди запускаются на выполнение.


Содержание раздела