|
В Linux есть специальный демон — cron, позволяющий выполнять программы по расписанию. В этой статье мы научим вас пользоваться этим демоном.
Очень часто нужно периодически выполнять одни и те же действия. Например, каждый день проверять обновление антивируса (или раз в неделю — в зависимости от того, как часто выходят для него обновления) или каждые 30 минут — почту. Можно выполнять эти действия самому, но это не совсем удобно. Представьте, что ваш рабочий день будет начинаться с команды запуска программы обновления антивируса, а каждые 30 минут вы будете вводить программу проверки почты. Во-первых, не это не очень удобно, а во-вторых, можно легко забыть выполнить ту или иную команду. Например, в пятницу вечером вы можете забыть выполнить команду создания резервной копии, а в понедельник утром что-то случится с сервером, и вы не досчитаетесь всего пользовательского каталога. Не очень приятно, правда? В Linux есть специальный демон — cron, позволяющий выполнять программы по расписанию. Откройте конфигурационный файл демона cron — /etc/crontab (листинг 10.1)
Листинг 10.1. Пример файла /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the 'crontab1 # command to install the new version when you edit this file. # This file also has a username field, that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 17 * * * * root run-parts —report /etc/cron.hourly 25 б * * * root run-parts —report /etc/cron.daily 47 6 * * 7 root run-parts —report /etc/cron.weekly 52 6 1 * * root run-parts —report /etc/cron.monthly #
Параметр SHELL задает имя программы-оболочки, параметр PATH — пусть поиска программ. Кроме этих параметров, могут также использоваться параметры MAILTO и НОМЕ. Параметр MAILTO задает имя пользователя, которому будет отправлен отчет о выполнении расписания, а НОМЕ — домашний каталог crond. Но самое главное — не эти параметры, а собсвенно таблица расписаний. В нашем случае она выглядит так: 17 * * * * root run-parts —report /etc/сгоп.hourly 25 б * * * root run-parts —report /etc/cron.daily 47 б * * 7 root run-parts —.report /etc/cron.weekly 52 б 1 * * root 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 +х 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/command2 arguments Первая команда будет запускаться каждый день в 7 часов утра, а вторая команда будет запускаться тоже каждый день, но в 7:20. Зная формат файла crontab, мы можем отредактировать стандартную таблицу расписания. Обратите внимание: команды, выполняемые ежедневно, будут запускаться в 4 часа утра. Это, конечно, удобно, но они не будут выполнены, если вы выключаете сервер на ночь. Поэтому давайте установим другое время, например, 8 часов утра: 0 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. |