2 posts tagged

cron

cron

Программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени.

Для редактирования заданий используется утилита crontab.
Листинг

Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e.


Простой пример файла расписания. Создание снимка экрана каждый час:
SHELL=/bin/bash
MAILTO=username
0 0-23 * * * scrot
Основные настройки

Выбор среды для исполняемых задач:
SHELL=/bin/bash

Имя пользователя, которому будет послано сообщение о выполнении задания:
MAILTO=username

Вместо имени, также можно использовать электронный адрес:
[email protected]
Не обязательные настройки

Задаем каталог пользователя:
HOME=

Задаем каталоги исполняемых фалов:
PATH=/sbin:/bin:/usr/sbin:/usr/bin

Прописываем дисплей, если запускаемый по крону скрипт должен выводить сообщение в области уведомлений:
DISPLAY=:0.0
Выбор времени выполнения задания

Время запуска представляется в таком виде:
минута час день_месяца месяц день_недели команда Значение Диапазон Дополнительно
минуты 0-59
часы 0-23
дни месяца 1-31
месяцы 1-12 можно задавать и в 3-х буквенном варианте
дни недели 0-6 можно задавать и в 3-х буквенном варианте (0=воскресенье)


Символ ‘*’ подразумевает – любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить. Дни недели и месяца в трех буквенном варианте:
sun mon tue wed thu fri sat
jan feb mar apr may jun jul aug sep oct nov dec

Дополнительные переменные cronПеременная Описание Эквивалент
@reboot Запуск при загрузке
@yearly Раз в год 0 0 1 1 *
@annually Тоже что и @yearly
@monthly Раз в месяц 0 0 1 * *
@weekly Раз в неделю 0 0 * * 0
@daily Раз в день 0 0 * * *
@midnight В полночь (00:00)
@hourly Каждый час 0 * * * *

Управление при помощи crontab

Добавление файла расписания:
crontab имя_файла_расписания

Вывести содержимое текущего файла расписания:
crontab -l

Удаление текущего файла расписания:
crontab -r

Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов):
crontab -e

Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:
-u username
Примеры

Каждую минуту:
* * * * *

Каждый час, с использованием переменных cron:
@daily ~/script.sh

Каждый день в 03:15 запускать скрипт:
15 3 * * * ~/script.sh

Каждый понедельник:
0 0 * * 1

Каждый четный час:
* */2 * *

Тоже что и выше, но расписанное полностью:
* 0,2,4,6,8,10,12,14,16,18,20,22 *

Новый год :
59 23 31 dec *

Каждый будний день в 22:00:
0 22 * * 1-5

Запуск программы с графической оболочкой (GUI); каждую минуту будет отображается сообщение с текстом «It work!»:
0-59 * * * * DISPLAY=:0 gdialog --msgbox “It work!” 25 20 > /dev/null

* где DISPLAY=:0 – номер монитора
2012   cron   ubuntu

Cron в Ubuntu. + bash-cкрипт резервного копирования.

Ubuntu, Системное администрирование
Tagged Under : bash, Ubuntu, Скрипты

Иногда системным администраторам, программистам, web-дизайнерам и много кому ещё нужно запускать одни и те же команды или скрипт с некоторой периодичностью. Для таких целей используется специальная утилита Cron, встроенная во все дистрибутивы Unix. Пользоваться Cron’ом необычайно легко. Сейчас расскажу как.

Для начала создадим какой-нибудь простой bash-скрипт, например скрип резервного копирования и архивирования конфигурационных файлов, в моём случае конфигурационных файлов Apache2 и ftp-сервера.
#!/bin/bash

mkdir /home/user/bash-scripts/backup
cp /etc/apache2/apache2.conf /home/user/bash-scripts/backup/apache2.conf-backup
cp /etc/apache2/sites-available/site /home/user/bash-scripts/backup/site-backup
cp /etc/proftpd/proftpd.conf /home/user/bash-scripts/backup/proftpd.conf-backup
tar cvvzf “/home/user/bash-scripts/backup-`date +%F-%X`.tar.gz” /home/user/bash-scripts/backup/
rm -r /home/user/bash-scripts/backup

Этот скрипт копирует конфигурационные файлы и архивирует их в папку, в названии которой присутствует дата и время сохранения. Назовём его ‘backup-script‘ а лежать он у нас будет в домашнем каталоге (/home/user/). Теперь нам надо чтобы этот скрипт запускался, ну допустим, каждые 10 минут. Для этого введём команду
crontab -e

Этой командой мы открываем для редактирования файл crontab для данного пользователя, в моём случае это user. Если нашему скрипту нужны права супер пользователя, то нужно редактировать crontab суперпользователя. Делается это командой
sudo crontab -u root -e

Ну и если заменить root а логин другого пользователя, мы будем редактировать его crontab.
Сразу напишу, чтобы посмотреть файл crontab введите команду.
crontab -l

Файл crontab имеет следующую структуру:

поле1 поле2 поле3 поле4 поле5 команда

Значения первых пяти полей:
1.минуты— число от 0 до 59
2.часы — число от 0 до 23
3.день месяца — число от 1 до 31
4.номер месяца в году — число от 1 до 12
5.день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Все поля обязательны для заполнения. Не сложно догадаться что первые 5 отвечают за определения периодичности запуска команды, а последняя собственно команда или полный путь к скрипту. Таким образом, чтобы запустить наш скрипт резервного копирования раз в 10 минут надо вписать следующую строчку.
*/10 * * * * /home/user/backup-script

* – значит все возможные варианты, / служит для определения периодичности выполнения задания. Если нужно будет выполнять скрипт раз в 3 часа впишите в значения часы */3 а в минуты просто *, если раз в сутки — впишите */23, ну почти сутки. Так же в одно поле можно вводить несколько значений через запятую, например если хотите выполнять скрипт 1ого, 5ого, и 25ог числа каждого месяца введите 1,5,25 вместо третей звёздочки. Ещё можно вводить промежуток времени, если ,допустим, в часы ввести 12-17 то скрипт будет выполняться с 12 до 17 включительно раз в час.
Ну вот и всё, в заключение пару примеров:
0 */3 * * 2,5 /home/user/backup-script
#Каждые три часа только по вторникам и пятницам
15 */3 * * * /home/user/backup-script
#Каждые три часа в 15 минут
45 15 * * 1 /home/user/backup-script
#По понедельникам в 15:45
13 13 13 * 5 /home/user/backup-script
#в пяnницу 13 числа в 13 часов 13 минут
30 00 * * 0 /home/user/backup-script
#Раз в н
2012   cron   linux   ubuntu