<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Под временным исполнением понимается способность системы исполнять указанные команды в указанное время без участия пользователя. При этом требуется лишь, чтобы был включен компьютер и загружена операционная система.
Есть два варианта временного исполнения: однократное исполнение команд в указанный день в указанное время (команда at) и периодическое исполнение одних и тех же команд -- например, раз в сутки (команда crontab).
В обоих случаях можно запускать только неинтерактивные команды -- т.е. такие, которые не взаимодействуют с терминалом, т.к. команды запускаются "сами по себе", без терминала. Хотя, в принципе, можно запускать таким образом X-программы, делать это следует с осторожностью.
|
В системах клона SystemV (таких, как Solaris и IRIX) вместо команды atrm используется "at -r", а вместо atq -- "at -l". Команда "at -c" в них не поддерживается. |
Для периодического исполнения команд служит подсистема Cron, а команда для редактирования списка команд используется команда crontab. (Слово "cron" -- это сокращение от "chronograph".)
У каждого пользователя для управления периодическим исполнением своих команд есть собственный так называемый crontab-файл ("crontab" -- "CRON driving TABle" -- "таблица управления Cron'ом). Этот (изначально пустой) файл расположен в недоступной для самого пользователя директории, и может просматриваться и редактироваться только при помощи команды crontab.
У команды crontab есть четыре варианта вызова:
Команда | Действие |
---|---|
crontab ФАЙЛ | Скопировать ФАЙЛ в crontab-файл |
crontab -l | Выдать содержимое crontab-файла |
crontab -r | Удалить crontab-файл |
crontab -e | Редактировать crontab-файл |
Для редактирования по умолчанию вызывается vi (причем в RedHat 5.2 crontab его не находит и "обламывается"). Чтобы использовать другой текстовый редактор (например, joe), надо указать его в переменной окружения EDITOR:
bobby:~% export EDITOR=joe bobby:~% crontab -e |
В каждой строке crontab-файла указывается команда и периодичность ее запуска. Пустые строки и строки, начинающиеся с символа "#", игнорируются.
Каждая строка состоит из шести полей, разделенных пробелами или символами табуляции. Формат строки следующий:
Минута Час ДеньМесяца Месяц ДеньНедели Команда
Например, строка
будет каждый понедельник в 23:00 запускать команду who и отсылать по e-mail выдаваемый ею список пользователей.0 23 * * 0 /usr/bin/who
Команды могут быть любыми, а не только скриптами. Вообще говоря, могут указываться любые сложные команды, допустимые в языке shell, в том числе содержащие перенаправление ввода/вывода. Но команды следует указывать с полным путем -- т.е. /home/users/ivanov/bin/mystatcmd, а не просто "mystatcmd". (Другой вариант -- присвоить в начале crontab-файла значение переменной окружения PATH, но мы это рассматривать не будем.)
|
Узнать полный путь программы можно при помощи команды which. Например, команда "which finger" выдаст "/usr/bin/finger". |
Месяцы нумеруются с 1 по 12, дни недели -- с 0 по 6 (0 -- воскресенье, 1 -- понедельник, 6 -- суббота). В Linux месяцы и дни недели можно указывать трехсимвольными именами (т.е. Jan, Feb, Mar...; Sun, Mon, Tue...).
Cron исполняет команду тогда, когда значения всех полей Минута, Час, Месяц и ДеньНедели или ДеньМесяца совпадают с текущим временем. Символ "*" означает "любое" или "каждое". Можно указывать несколько значений через запятую, например "10,30,50" в поле Минута означает "в 10, 30 и 50 минут". Допускаются также диапазоны через дефис, например, "1-5" в поле ДеньНедели означает "с понедельника по пятницу".
Для указания дня служат два поля: ДеньМесяца и ДеньНедели. Команда будет запускаться, когда значение любого из этих полей совпадает с текущим днем. Например, строка
будет запускать vmstat в 4:30 утра по первым и пятнадцатым числам каждого месяца, плюс каждую пятницу.30 4 1,15 * 5 /usr/bin/vmstat
Несколько примеров:
# Запускать df каждый день в 7:00 утра 0 7 * * * /bin/df # Заказывать кофе каждый рабочий день в 10:00, 13:00 и 17:00 0 10,13,17 * * 1-5 echo Now| mail -s "Coffee, please" waitor@restaurant # Производить подсчет своего бюджета 6 и 21 числа каждого месяца 0 14 6,21 * * /home/users/ivanov/bin/calcbudget |
Очень хорошая и полная документация на crontab-файлы есть в man-странице crontab(5) (т.е. для просмотра надо набрать "man 5 crontab").
|
В старых BSD-системах пользоваться подсистемой Cron может только "root" (если только стандартный пакет Cron не заменен на Vixie-Cron, что, впрочем, в последнее время стало почти правилом). |
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел