Skip to content

Home Тюнинг Linux Запуск программ по расписанию. Демон crond и программа at
Запуск программ по расписанию. Демон crond и программа at

Очень часто нужно периодически выполнять одни и те же действия. Например, каждый день проверять обновление антивируса (или раз в неделю — в зависимости от того, как часто выходят для него обновления) или каждые 30 минут — почту. Можно выполнять эти действия самому, но это не совсем удобно. Представьте, что ваш рабочий день будет начинаться с команды запуска программы обновления антивируса, а каждые 30 минут вы будете вводить программу проверки почты. Во-первых, это не очень удобно, а во-вторых, можно легко забыть выполнить ту или иную команду. Например, в пятницу вечером вы можете забыть выполнить команду создания резервной копии, а в понедельник утром что-то случится с сервером, и вы не досчитаетесь всего пользовательского каталога. Не очень приятно, правда?

В Linux есть специальный демон cron, позволяющий выполнять программы по расписанию. Откройте конфигурационный файл демона cron — /etc/crontab.

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
1 * * * * root nice -n 19 run-parts —report /etc/cron.hourly
2 4 * * * root nice -n 19 run-parts —report /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts —report /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts —report /etc/cron.monthly

Параметр SHELL задает имя программы-оболочки, параметр PATH— путь поиска программ, MAILTO — имя пользователя, которому будет отправлен отчет о выполнении расписания, а НОМЕ — домашний каталог crond.

Но самое главное, не эти параметры, а сама таблица расписаний. В нашем случае она выглядит так:

1 *    *    *    * root nice    -n    19 run-parts    —report    /etc/cron.hourly 
2 4    *    *    * root nice    -n    19 run-parts    —report    /etc/cron.daily
22 4    *    *    0 root nice    -n    19 run-parts    —report    /etc/cron.weekly
42 4    1    *    * root nice    -n    19 run-parts    —report    /etc/cron.monthly

 

Согласно этой таблице, каждый час будут выполняться программы из каталога /etc/cron.hourly, каждый день — из каталога /etc/cron.daily, каждую неделю— из каталога /etc/cron.weekly, и раз в месяц— из каталога /etc /cron.monthly.

Предположим, вам нужно каждый день выполнять команду update_av ftp://server.ru/bases/. В каталоге /etc/cron.daily создайте файл update_av следующего содержания:

#!/bin/bash 
update_av ftp://server.ru/bases/

Мы создали небольшой bash-сценарий (сценарий командного интерпретатора). Теперь сделаем его исполнимым, и все будет готово:

# chmod +x update_av

Правда, удобно? Но иногда нам нужно создать более гибкое расписание. Например, мы хотим, чтобы одна программа выполнялась в 7 часов утра, а другая в 7:20. Тут простым добавлением сценария в каталог /etc/cron.daily уже не отделаешься. Чтобы создать такое расписание, вам нужно изучить формат записей таблицы расписаний. А формат следующий:

минуты часы день месяц день_недели команда

где поля имеют следующие значения:

  • минуты—0—59;
  • часы—0—23;
  • день — 1—31;
  • месяц— 1—12;
  • день_недели— 0—6, 0 — воскресенье.

Чтобы реализовать наше расписание, нам нужно добавить в /etc/crontab следующие строки:

0   7   *   *   *   /usr/bin/commandl arguments 
20 7    *    *    *    /usr/bin/conroand2 arguments

Первая команда будет запускаться каждый день в 7 часов утра, а вторая команда будет запускаться тоже каждый день, но в 7:20.

Зная формат файла crontab, мы можем отредактировать стандартную таблицу расписания. Обратите внимание: команды, выполняемые ежедневно, будут запускаться в 4 часа утра. Это, конечно, удобно, но они не будут выполнены, если вы выключаете сервер на ночь. Поэтому давайте установим другое время, например, 8 часов утра: 02 8 * * * root nice -n 19 run-parts —report /etc/cron.daily


Аналогичная ситуация и с еженедельным запуском. Программы будут запушены не только в 4:22 утра, но еще и в воскресенье. На выходные вы точно выключите свой сервер (хотя это зависит от политики организации — ведь во многих организациях выключают на выходные все компьютеры). Поэтому целесообразно назначить запуск на понедельник в 8 часов 22 минуты:

22  8  *  *  1 root nice -n 19 run-parts —report /etc/cron.weekly

С ежемесячным запуском вроде бы все нормально: программы будут выполняться в 4:42 первого числа каждого месяца. Хотя время можно было бы и изменить на 8:42:

42   8   1   *   *   root nice -n 19 run-parts —report /etc/cron.monthly

Иногда нужно просто выполнить определенные команды в определенное время (разово), поэтому редактировать таблицу crontab не совсем уместно. Данную задачу можно решить более рационально. Убедитесь, что у вас установлен и запущен демон atd. После этого введите команду

at <время> [дата]

Затем просто вводите команды, которые вы хотите выполнить в указанное время. Для завершения ввода нажмите комбинацию клавиш <Ctrl>+<D>. Время указывается в АМ/РМ-формате, например, если вам нужно выполнить команды в 14:00, то вы должны ввести команду:

at 2pm

Просмотреть очередь заданий можно командой atq, а удалить какое-либо задание     командой atrm.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top