Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Запуск команд по расписанию

Prev 

Chapter 5. Утилиты командной строки

 Next


Запуск команд по расписанию

crontab: Уведомление или редактирование вашего файла crontab

crontab - это команда, которая позволяет вам периодически выполнять команды через определенные промежутки времени с тем преимуществом, что вам нет необходимости входить в систему. crontab отправит вам письмо с отчетом о выполнении вашей команды. Вы можете указывать интервалы в минутах, часах, днях и даже месяцах. В зависимости от указанных опций, crontab будет работать по-разному:

  • -l: Вывод вашего текущего файла crontab.
  • -e: Редактирование вашего файла crontab.
  • -r: Удаление вашего текущего файла crontab.
  • -u <пользователь>: Применение одной из перечисленных выше опций для <пользователя>. Это может сделать только root.

Давайте начнем с редактирования crontab'а. Если вы введёте команду crontab -e, перед вами окажется ваш любимый текстовый редактор, если у вас установлена переменная окружения EDITOR или VISUAL, в противном случае будет использован Vi. Строка в файле crontab состоит из шести полей. Первые пять полей - это интервалы времени в минутах, часах, днях, месяцах и днях недели соответственно. Шестое поле - это выполняемая команда. Строки, начинающиеся с # - это комментарии, они будут проигнорированы демоном crond (программой, отвечающей за выполнение заданий из crontab). Вот пример файла crontab:

[Note]

Note

Для того, чтобы напечатать его удобочитаемым шрифтом, мы должны были разорвать длинные строки. Поэтому, некоторые участки кода должны быть набраны одной строкой. Когда строка заканчивается знаком \, это означает, что эта строка имеет продолжение. Это соглашение действительно в файлах Makefile, в shell, а также в других контекстах.

# Если вы не хотите получать почту, просто
#   закомментируйте следующую строку
#MAILTO="ваш_адрес_email"
#
# Уведомление о новых изображениях каждые 2 дня в 14:00, 
#   из примера выше - после чего, выполнение "retouch"
#   для файла "stamp". Знак "%" означает 
#   новую строку, это позволяет вам указывать несколько команд 
#   в одной строке.
0 14 */2 * *  find /shared/images              \
  -cnewer /shared/images/stamp                 \
  -a -iregex ".*\.jpe?g"                       \
  -a -not -regex                               \
    ".*/old/.*"%touch /shared/images/stamp
#
# Воспроизведение мелодии на каждое Рождество :)
0 0 25 12 * mpg123 $HOME/sounds/merryxmas.mp3
#
# Каждый четверг в 17:00 вывод списка покупок...
0 17 * * 2 lpr $HOME/shopping-list.txt

Существует еще несколько способов указания интервалов, кроме того, что показан в этом примере. Например, вы можете указать набор дискретных значений, разделённых запятыми (1,14,23) или диапазон (1-15), или даже комбинировать их (1-10,12-20), а можно и с некоторым шагом (1-12,20-27/2). Теперь вашей задачей будет найти полезные команды и поместить их в этот файл!

at: Выполнение команды по расписанию, но только один раз

Возможно, вы хотели бы выполнить какую-нибудь команду в определённый день, но не регулярно. Например, вам нужно напомнить себе о сегодняшней встрече в 18:00. Вы работаете в X, у вас установлен пакет X11R6-contrib и вы хотели бы получить напоминание, скажем, в 17:30 о том, что пора выходить. Тогда at - это то, что вам нужно:

$ at 17:30
  # Теперь перед вами приглашение "at"
at> xmessage "Пора идти! Встреча в 18:00"
  # Нажмите CTRL-d для выхода
at> <EOT>
$ 

Указывать время можно разными способами:

  • now +<интервал>: Означает сейчас + интервал (Не обязателен. Отсутствие интервала означает немедленное выполнение). Синтаксис для интервала: <n>(minutes|hours|days|weeks|months). Здесь minutes - минуты, hours - часы, days - дни, weeks - недели и months - месяцы. Например, вы можете указать now + 1 hour (через один час), now + 3 days (через трое суток) и так далее.
  • <time> <day>: Полное указание даты. Опция <time> (время) является обязательной. Её формат для at довольно свободный: вы, например, можете ввести 0100, 04:20, 2am, 0530pm, 1800 или одно из трех специальных значений: noon (полдень), teatime (время вечернего чая в 16:00) или midnight (полночь). Опция <day> (день) является необязательной. Вы также можете указать её различными способами: например, 12/20/2004, что соответствует двадцатому декабря 2004 года, или, по европейскому стандарту, 20.12.2004. Вы можете не указывать год, но тогда допускается только европейская форма записи: 20.12. Также вы можете записать месяц буквами: и Dec 20, и 20 Dec будут верны.

Также at допускает использование разнообразных опций:

  • -l: Выводит список заданий, стоящих в очереди на выполнение. Первое поле представлет собой номер задания. Это эквивалент команды atq.
  • -d <n>: Удаляет из очереди задание под номером <n>. Вы можете получить номера заданий при помощи команды atq. Это эквивалент команды atrm <n>.

Как обычно, для получения дополнительной информации смотрите страницу руководства для at(1).


Prev 

Up

 Next

find: Поиск файлов по определенным критериям 

Home

 Архивирование и упаковка данных