В Linux есть специальный демон — cron, позволяющий выполнять программы по расписанию. В этой статье мы научим вас пользоваться этим демоном.
Очень часто нужно периодически выполнять одни и те же действия. Например, каждый день проверять обновление антивируса (или раз в неделю — в зависимости от того, как часто выходят для него обновления) или каждые 30 минут — почту. Можно выполнять эти действия самому, но это не совсем удобно.
Представьте, что ваш рабочий день будет начинаться с команды запуска программы обновления антивируса, а каждые 30 минут вы будете вводить программу проверки почты. Во-первых, не это не очень удобно, а во-вторых, можно легко забыть выполнить ту или иную команду. Например, в пятницу вечером вы можете забыть выполнить команду создания резервной копии, а в понедельник утром что-то случится с сервером, и вы не досчитаетесь всего пользовательского каталога. Не очень приятно, правда?
В Linux есть специальный демон — cron, позволяющий выполнять программы по расписанию. Откройте конфигурационный файл демона cron — /etc/crontab
Пример файла /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 <время> [дата]
Затем просто вводите команды, которые вы хотите выполнить в указанное время. Для завершения ввода нажмите комбинацию клавиш
at 2pm
Просмотреть очередь заданий можно командой atq, а удалить какое-либо задание — командой atrm.
Свежие комментарии