| Запуск программ по расписанию. Демон crond и программа at |
|
Очень часто нужно периодически выполнять одни и те же действия. Например, каждый день проверять обновление антивируса (или раз в неделю — в зависимости от того, как часто выходят для него обновления) или каждые 30 минут — почту. Можно выполнять эти действия самому, но это не совсем удобно. Представьте, что ваш рабочий день будет начинаться с команды запуска программы обновления антивируса, а каждые 30 минут вы будете вводить программу проверки почты. Во-первых, это не очень удобно, а во-вторых, можно легко забыть выполнить ту или иную команду. Например, в пятницу вечером вы можете забыть выполнить команду создания резервной копии, а в понедельник утром что-то случится с сервером, и вы не досчитаетесь всего пользовательского каталога. Не очень приятно, правда? В Linux есть специальный демон cron, позволяющий выполнять программы по расписанию. Откройте конфигурационный файл демона cron — /etc/crontab. SHELL=/bin/bash Параметр SHELL задает имя программы-оболочки, параметр PATH— путь поиска программ, MAILTO — имя пользователя, которому будет отправлен отчет о выполнении расписания, а НОМЕ — домашний каталог crond. Но самое главное, не эти параметры, а сама таблица расписаний. В нашем случае она выглядит так: 1 * * * * root nice -n 19 run-parts —report /etc/cron.hourly
Согласно этой таблице, каждый час будут выполняться программы из каталога /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 Мы создали небольшой bash-сценарий (сценарий командного интерпретатора). Теперь сделаем его исполнимым, и все будет готово: # chmod +x update_av Правда, удобно? Но иногда нам нужно создать более гибкое расписание. Например, мы хотим, чтобы одна программа выполнялась в 7 часов утра, а другая в 7:20. Тут простым добавлением сценария в каталог /etc/cron.daily уже не отделаешься. Чтобы создать такое расписание, вам нужно изучить формат записей таблицы расписаний. А формат следующий: минуты часы день месяц день_недели команда где поля имеют следующие значения:
Чтобы реализовать наше расписание, нам нужно добавить в /etc/crontab следующие строки: 0 7 * * * /usr/bin/commandl arguments Первая команда будет запускаться каждый день в 7 часов утра, а вторая команда будет запускаться тоже каждый день, но в 7:20. Зная формат файла crontab, мы можем отредактировать стандартную таблицу расписания. Обратите внимание: команды, выполняемые ежедневно, будут запускаться в 4 часа утра. Это, конечно, удобно, но они не будут выполнены, если вы выключаете сервер на ночь. Поэтому давайте установим другое время, например, 8 часов утра: 02 8 * * * root nice -n 19 run-parts —report /etc/cron.daily
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.
Set as favorite
Bookmark
Email This
Hits: 1354 Комментарии (0)RSS feed CommentsНаписать комментарий |