Иногда системным администраторам, программистам, 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 #Раз в неделя по воскресеньем в 00:30
Промокод на выставку опен виладж 2024. Приглашаем вас на выставку www.indivi-dom.ru.
Здравствуйте!
Настраиваю в Ubuntu cron вроде отредактировал файл, а запустить не получается.
На команду subo /sbin/service crond start выдает command not found
Подскажите, пожалуйста, как запустить.
Информация ваша очень мне понравилась.
Доступно написано. Пять балов, из пяти.
А разве sudo /etc/init.d/cron stop/start не работает?
`date +%F-%X` <- Вот тут мы используем обратную кавычку ?
Нет, не работает, получишь что-то вроде:
cron: can’t lock /var/run/crond.pid, otherpid may be 6935: Resource temporarily unavailable
Добрый день! статья очень понравилась, на самом беле доступно! но у меня стоит ред хат, я попробовал на нем это зделать, но вот скрипт не запустился, как мне быть?
у меня .sh скрипт, он находится в home, мне нужно чтоб он запускался каждые 10 минут! но увы. ни как не получается
проверь права доступа скрипта (есть ли право на запуск).
Как загнать в крон выключение компьютера через 20 минут простоя?
Отличная статья. Особенно про cron всё чётко и понятно.
нынче актуально
вместо `date +%F-%X` писать
$(date +%Y%m%d_%H%M)
%Y — год
%m — месяц
%d — число
%H — час
%M — минуты
ну или те варианты, которые вам удобнее!