» »

Crontab каждые 5 минут как поставить. Cron - точно по расписанию. Как запустить сценарий от имени пользователя

01.06.2020

(Задания по расписанию) служит для настройки выполнения команд по расписанию или в строго назначенное время. С помощью CronTab Вы можете задать определенное время, и точно в это время выполнится указанная Вами команда. Сконфигурировать CronTab можно таким образом, что задача будет выполняться раз в месяц , день , час и ежеминутно или, например, каждые 10 минут . Также можно комбинировать, к примеру, Вам необходимо первые 2 часа выполнять задание раз в час, затем следующие 2 часа не выполнять.

Также одним из удобств является возможность отправки результатов выполнения заданий на email. Для этого нажмите на соответствующую надпись и введите email.

Мастер заданий

Первое знакомство с Cron для нас начинается с открытия Мастера заданий . С помощью мастера можно без каких-либо серьезных знаний администрирования настроить время выполнения скриптов, просто выбирая из выпадающих списков определенную комбинацию. Также необходимо ввести путь к скрипту или команду, которая будет выполняться в Cron .

Давайте посмотрим пример запуска скрипта, написанного на языке PERL , который необходимо запускать каждые 5 минут .

После нажатия на кнопку , под основным окном Cron появится новая запись с Вашей первой конфигурацией. Количество таких записей не ограничено.

Теперь у нас есть первое задание, которое мы можем включить /выключить , изменить или удалить с помощью кнопок, расположенных справа, напротив каждого из заданий:

Включить/выключить задание;
- изменить задание;
- удалить задание.

Ручная настройка CronTab.

Также в разделе есть ручная настройка, позволяющая настраивать время запуска скрипта в привычном виде, для тех, кто знаком с Cron .

Время, интервал

Минуты могут быть от 0 до 59
Часы могут быть от 0 до 23
День месяца может быть от 1 до 31
Месяц может быть 1 до 12
День недели может быть от 0 до 7 , где 0 и 7 - воскресенье

Можно конфигурировать CronTab для выполнения задач не только в определенное
время, но и ежеминутно , ежечасно , ежедневно , еженедельно или ежемесячно ,
используя комбинацию */x

Примеры

*/5 * * * * - запускать команду каждые пять минут
0 */3 * * * - запускать каждые три часа
0 12-16 * * * - запускать команду каждый час с 12 до 16 (в 12, 13, 14, 15 и 16)
0 12,16,18 * * * - запускать команду каждый час в 12, 16 и 18 часов

*/1 * * * * /usr/bin/php ~/site.ru/public_html/test.php - запуск каждую минуту php-скрипта test.php
0 */1 * * * /usr/bin/perl ~/site.ru/public_html/test.pl - запуск каждый час perl-скрипта test.pl

Команда

Необходимо задать путь до скрипта от домашнего каталога
Например: public_html/cgi-bin/script.pl
Cистема сама подставит символ ~/ (эта комбинация заменяет полный путь)
Получится: ~/public_html/cgi-bin/script.pl
Если в конце пути поставить символ & (амперсанд), то скрипт будет работать в фоновом режиме.
Установка этого символа необязательна.

MIN HOUR DOM MON DOW CMD

Таблица: Поля и допустимые диапазоны Crontab (синтаксис Linux Crontab)

1. Планирование задач в течение определённого времени

Основа использования cron – выполнение задач в определённое время, как показано ниже. Это будет выполнять скрипт полного резервного копирования (full-backup) 10 июня в 8.30.

Пожалуйста, обратите внимание, что поле времени использует 24-часовой формат, Так что 8 АМ – 8, 8 РМ – 20 часов.

30 08 10 06 * /home/developer/full-backup

  • 30 – 30-ая минута
  • 08 – 08 АМ
  • 10 – 10-й день
  • * – каждый день недели

2. Расписание задач для более частого выполнения (например, дважды в день)

Следующий скрипт использует дополнительное резервное копирование дважды в день каждый день. В этом примере выполняется дополнительное резервное копирование (incremental-backup) в 11:00 и в 16:00 каждый день. Значения через запятую в поле указывают, что команда должна быть выполнена в каждое указанное время.

00 11,16 * * * /home/developer/bin/incremental-backup

00 – 0-ая минута (начало часа) 11, 16 – 11 и 16 часов * - каждый день * - каждый месяц * - каждый день недели

3. Расписание работы в течение определённого интервала времени (например, только в будние дни)

Если вы хотите, чтобы подпрограммы выполнялись в течение каждого часа с определённым интервалом времени, используйте следующее.

Подпрограмма Cron для каждого дня в течение рабочих часов

Этот пример каждый день проверяет состояние базы данных (включая выходные) в течение рабочих часов с 9 утра до 6 вечера.

00 09-18 * * * /home/developer/bin/check-db-status

00 - 0-ая минута (начало часа) 09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часы) * - каждый день * - каждый месяц * - каждый день недели

Подпрограмма Cron для каждого рабочего дня в течение рабочих часов

Этот пример проверяет состояние базы данных каждый рабочий день (кроме субботы и воскресенья) с 9 утра до 6 вечера.

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status

00 - 0-ая минута (начало часа) 09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часы) * - каждый день * - каждый месяц 1-5 - Понедельник, Вторник, Среда, Четверг и Пятница (каждую неделю)

4. Как просмотреть записи Crontab?

Просмотр текущих Crontab-файлов пользователя.

Чтобы просмотреть ваши файлы crontab-l из вышей учётной записи unix, проделайте следующее.

Developer@dev-db$ crontab -l @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Просмотр root записей crontab

Залогиньтесь в качестве root пользователя (su - root) и выполните crontab-l как показано ниже.

Root@dev-db# crontab -l no crontab for root

Чтобы посмотреть файлы других пользователей, залогиньтесь в качестве root пользователя и и используйте -u { имя пользователя} -l как показано ниже.

Root@dev-db# crontab -u username -l @monthly /home/username/monthly-backup 00 09-18 * * * /home/username/check-db-status

5. Как редактировать записи crontab?

Редактирование текущих пользовательских cron-записей.

Чтобы редактировать записи, используйте cronab -e как показано ниже. По умолчанию, будут редактироваться текущие записи crontab пользователя.

Developer@dev-db$ crontab -e @yearly /home/developer/centos/bin/annual-maintenance */10 * * * * /home/developer/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C

Когда вы сохраните файл, он сохранит crontab и покажет следующее сообщение, где будет сказано, что crontab успешно изменён.

~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab

Редактирование root записей crontab

Залогиньтесь как root пользователь (su - root) и сделайте crontab -e , как показано ниже.

Root@dev-db# crontab -e

Редактирование записей crontab-файла другого пользователя

Чтобы отредактировать запись crontab другого пользователя Linux, залогиньтесь в под root и используйте -u { имя пользователя} –е, как показано ниже.

Root@dev-db# crontab -u username -e @monthly /home/username/fedora/bin/monthly-backup 00 09-18 * * * /home/username/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C

6. Выполнение Cron каждую минуту

В идеале, вам может и не потребоваться назначения выполнения cron каждую минуту. Но понимание этого примера поможет вам понять другие примеры, описанные в этой статье.

Bash * * * * * CMD

* - означает возможную единицу – то есть, каждую минуту каждого часа в течение года. Кроме того, использование * напрямую, окажется более полезной функцией в следующих примерах.

Указание */5 в поле минут означает каждые 5 минут. Указание 0-10/2 в поле минут означает каждые 2 минуты в первых 10 минутах. Таким образом, данная условность может быть использована во всех 4 полях.

7. Запуск фоновых задач Cron каждые 10 минут

Используйте следующее, если хотите проверять место на диске каждые 10 минут.

*/10 * * * * /home/ramesh/check-disk-space

Эта задача выполняет указанную команду проверки диска каждые 10 минут на протяжении года. Но вам может потребоваться выполнение проверки только в рабочие часы или наоборот. Приведённые выше примеры показывают, как это сделать.

Вместо указания значений в 5 полях мы можем указать их, используя ключевое слово, как показано ниже.

Существуют особые условия, когда вместо 5 полей вы можете использовать @ и далее ключевое слово – такие как перезагрузка, полночь, ежегодно, ежечасно.

Специальные ключевые слова Cron и их значение

8. Расписание работы для первой минуты каждого года с использованием @yearly

Если вы хотите, чтобы cron задача выполнялись в первые минуты каждого года, то можете использовать ключевое слово @yearly , как это показано ниже. В стаком случае система будет выполнять ежегодное техническое обслуживание, используя скрипт ежегодного тех.обслуживания в 00:00 1 января каждого года.

@yearly /home/developer/red-hat/bin/annual-maintenance

9. Запуск задач каждый месяц с использованием ключевого слова @monthly

Оно схоже со словом @yearly , приведённым выше. Но команда выполняется ежемесячно. Команда будет выполнять резервное копирование в 00:00 первого числа каждого месяца.

@monthly /home/ramesh/suse/bin/tape-backup

10. Запуск задач каждый день с использованием @daily

Используя ключевое слово @daily , будет ежедневно создаваться лог-файл очистки журнала в 00:00 каждый день.

@daily /home/developer/arch-linux/bin/cleanup-logs "day started"

11. Как выполнить команду Linux после каждой перезагрузки, используя @reboot?

Используя ключевое слово @reboot , будет выполняться указанная команда каждый раз после загрузки системы.

@reboot CMD

13. 12. Как отключить/перенаправить исходящую почту Crontab, используя ключевое слово MAIL?

По умолчанию crontab отправляет выходные (output) задачи пользователю, который установил эту задачу. Если вы хотите перенаправить их другому пользователю, добавьте или обновите переменную MAIL в crontab, как показано ниже.

Developer@dev-db$ crontab -l MAIL="developer" @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Если вы хотите, чтобы почта вообще не отправлялась, т.е прекратить отправку выходных файлов crontab, добавьте или обновите переменную MAIL в crontab, как показано ниже.

13. Как выполнять задачи Linux Cron кажду секунду, используя Crontab

Вы не можете настроить выполнение cron на каждую секунду. Потому что минимальная единица выполнения cron – минута. В обычном сценарии нет необходимости запускать выполнение cron каждую секунду.

14. Указание переменной PATH в Crontab

Во всех вышеприведённых примерах мы указывали абсолютный путь команды Linux или скрипта оболочки, которые должны быть выполнены.

Например, вместо указания /home/developer/tape-backup , если вы хотите указать только tape-backup , добавьте путь /home/developer к переменной PATH в crontab , как показано ниже.

Developer@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/developer @yearly annual-maintenance */10 * * * * check-disk-space

15. Установка Crontab из Cron-файла

Вместо прямого редактирования файла crontab вы можете добавить, все записи в cron-файл. Если в файле есть эти записи, вы можете выгрузить или установить их в cron, как показано ниже.

Примечание: Будет создан файл cron-file.txt в вашем crontab, который удалит прежние записи cron. Поэтому, пожалуйста, будьте внимательны при загрузке записей cron из cron-file.txt:

developer@dev-db$ crontab -l no crontab for developer $ cat cron-file.txt @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space developer@dev-db$ crontab cron-file.txt developer@dev-db$ crontab -l @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Cron применяют для автоматизации выполнения поставленных задач на сервере. Он работает на Linux и отлично подходит для того, чтобы запустить программу или скрипт на определенное время и с определенной периодичностью, запланировав это действие заранее.

Настройка планировщика заданий Cron

Необходимые к выполнению задания записываются в виде строк, в которых необходимо указать период включения и команду, указывающую, что именно необходимо запустить. Для каждого задания отводится отдельная строка. Например:

30 3 * * 2 /yourdirectory/myscript.pl

На более понятном простому пользователю языке тут обозначены: Минуты/Часы/ДеньМесяца/ДеньНедели/Команда. Данный пример означает, что в 3:30 ночи, каждый вторник, Сron должен запускать файл с названием youdirectory/myscript.pl.

Если перечислить значения через запятую, например в пункте «День» написать 2,4,6, то файл будет запускаться в указанное время каждый вторник, четверг и субботу.

Если задать значения через дефис, то задача будет исполняться в указанном интервале времени. Например, если в пункте «Часы» задать 3-7, то файл будет запускаться каждый час с 3 до 7 утра.

Также можно задать периодичность, написав в графе времени, например, в «Часы» /12. Тогда задача будет исполняться каждые 12 часов.

Важно знать, что «*» означает не отсутствие значения, а все возможные значения. То есть, если задать * * * * 1 /yourdirectory/myscript.pl, желая, чтобы файл запускался каждый понедельник, то это окажется совершенно неверным и файл будет запускаться каждую минуту.

Еще одна важная особенность – это необходимость указания абсолютного пути к файлу. А также файлу необходимо иметь такие права доступа, чтобы он хотя бы мог запускаться.

Из представленных примеров становится понятно, что данный планировщик задач в Linux является очень удобным инструментом, поэтому предлагаем вам более подробно ознакомиться с некоторыми его особенностями.

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

Иногда случается, что хостинг не предоставляет возможности работы с Cron через панель администрирования. В такой ситуации используют SSH-протокол. С помощью него подключаются серверу, используя программу PuTTY, и вводят задачи в командной строке.

Для начала работы следует ввести команду:

Crontab –e

Далее вы попадете в vi – текстовый редактор, однако, эти редакторы могут быть разными у разных хостингов. Если вы не знакомы с работой в vi, то вы можете ввести команду: EDITOR=ee crontab –e, которая перенаправит вас в более простой и понятный редактор.

В случае, когда хостинг не осуществляет поддержку открывшегося редактора, придется разобраться с работой vi:

  • для ввода текста необходимо перейти в одноименный режим, нажав кнопку «i»;
  • для выхода из режима воспользуйтесь кнопкой «Esc»;
  • для удаления символа в режиме ввода текста воспользуйтесь клавишами «Esc», а затем «x»;
  • сохранения и выхода из файла нажмите «:wq»;
  • в обязательном порядке нажимайте клавишу «Enter» в конце каждой строчки, это необходимо для работы Cron;
  • для просмотра уже имеющихся задач в Cron введите команду crontrab-l.

Примеры задач для Cron в linux

— Исполнять задание каждые 6 часов в 30 минут каждого дня каждого месяца:

30 */6 * * * /yourdirectory/myscript.pl

— Исполнять задание после каждой перезагрузки:

@reboot /yourdirectory/myscript.pl

— Исполнять задание 15 числа каждого месяца в 00 часов 00 минут:

0 0 15 * * /yourdirectory/myscript.pl

PHP-файлы

Чтобы запустить PHP-скрипты, обычно используют интерпретатор. Универсальной инструкции по его работе нет, так как разные хостинги используют разнообразный софт. В следствие этого часто прибегают к помощи WGET для запуска PHP в Cron. Вводим следующую запись:

1 2 * * 3 root wget -O - -q -t 1 http://mysite.com/file.php

Разберем более подробно:

  • «-O-» — не дает Cron создавать дополнительные файлы, тем самым, избавляя сервер от лишнего хлама, так как работа происходит в консоли;
  • «q» — операции больше не выводятся на экран;
  • «t-1» — разрешение лишь одной попытки соединения.

Ограничения Cron

У самого Cron имеется всего одно ограничение – период исполнения задач. Если вы перегружаете сервер своего хостинга, он может поставить запрет на запуск Cron чаще, чем раз в несколько минут или час. Кроме этого Cron ограничен только ресурсами сервера, такими как: оперативная память, объемы данных, время выполнения команд и т.д.

Если сервер перезагрузится, то Cron сохранит все ваши задачи, перезагрузившись вместе с ним.

Отчет

У Cron существует настройка, чтобы настроить уведомления о его работе на электронную почту. Это особенно полезно, если при работе случится какая-либо ошибка. Чтобы включить такие уведомления на почту, необходимо в crontab вписать строчку:

MAILTO= [email protected]

После MAILTO= указывается необходимая почта. Указать их можно сразу несколько, перечислив через запятую. Теперь, если вдруг случится ошибка, вы будете проинформированы об этом. При чем, к вам на почту будут приходить и результаты работы скриптов. Однако, если данная функция вам мешает, ее можно и отключить, введя в конце задачи команду > /dev/null 2>&1.

Cron (крон), Crontab (кронтаб), Планировщик Задач - эти названия все, кто связан с «сайтостроением» слышали неоднократно. Так что же такое Cron? Как с ним работать? Зачем нужен Cron и как его правильно настроить? Все эти вопросы мы сегодня и разберем.

Первое что хочу сразу отметить: Cron , Crontab , Планировщик Задач - это всё одно и тоже, не смущайтесь от разнообразия названий.

В практике любого web-мастера, неизменно возникнет необходимость в запуске каких-либо задач по расписанию. Т.е. Вы просто прописываете нужную Вам команду, на выполнение какой-то задачи в заданное время, и всё. Дальше все происходит без Вашего участия – автоматически, и что самое приятное в нужное Вам время.

Например, Вам нужно периодически отсылать уведомления партнерам по электронной почте. Или Вы хотите установить автоматические поздравления или напоминания. Или у Вас есть каталог сайтов и Вы хотите чтобы с заданной периодичностью скрипт каталога проверял обратные ссылки и т.д. Все эти задачи можно запросто автоматизировать, поручив это Cron или, как ещё говорят – Планировщику Задач . А бывают скрипты в которых для нормальной работы Крон просто необходим.

Практически все современные Хостинги предоставляют уже готовую функцию Планировщика Задач . Если такой функции на Хостинге нет, то лучше не связывайтесь с такой Хостинговой компанией. Cron в наши дни - это уже не роскошь и если Хостинг не предлагает в пакете услуг планировщик задач, лучше поищите другую компанию, наверняка не будет и других важных функций.

Итак, давайте рассмотрим все практические действия по настойке Cron на примере русcифицированной cPane l (панели управления сайтом) Хостинговой компании Гудзон . Почему именно Гудзон ? Всё просто – здесь живет мой сайт и мне очень нравится этот Хостинг: полный пакет всех самых возможных услуг за очень умеренную цену.

Хотя настройка Планировщика Задач происходит примерно везде одинаково.

Заходим в панель управления сайтом, в данном случае это cPanel (бывают и другие). Доступ Вам предоставляется сразу же после покупки Хостинга , опускаемся ниже и находим вот такой раздел, Дополнительные инструменты :

Находим в этом разделе Планировщик задач и кликаем по нему. Иногда это меню называется Панель Cron . Вот как характеризуется Cron :

"Планировщик задач позволяет вам запускать команды в указанное время без вашего участия. Это позволяет вам автоматизировать регулярно повторяющиеся работы. Планировщик задач настраиваются очень гибко и позволяют вам автоматизировать выполнение любых команд, которые вы захотите запустить. К примеру, вы можете указать планировщику удалять временные файлы каждую неделю, чтобы они не занимали слишком много места на вашем диске".

На выбор предоставляется два варианта управления Кроном:

Стандартный и Продвинутый (в стиле Unix) , рассмотрим каждый из них.

Первый вариант. Кликаем по кнопке Стандартный , открывается окно установки задач:

Как видите здесь все очень просто. Нужно просто установить время выполнения команды, указав для этого в соотвествующих полях, когда будет запускаться команда, во сколько: Минут , Час , День , Месяц , День недели . И конечно же прописать саму команду на запуск в поле: Команда для запуска .

Значения можно писать как в ручную (в левом поле), так и воспользоваться выпадающим списком (стрелочки справо).

Давайте разберемся, что мы здесь написали. А написали мы следующее задание: запускать команду на исполнение:
/usr/bin/php /home/freeman/domains/public_html/cron/new_day.php
каждые 30 минут, каждые 6 часов, каждый день января месяца, если он попадает на понедельник.

После установки задания нажимаем кнопку Add New Cron Job .

Не понятно что написали? :) Давайте расмотрим второй вариант, а затем поясню подробнее. Возвращаемся на преведущую страницу.

Второй вариант. Кликаем по кнопке Продвинутый (в стиле Unix) , открывается окно установки задач:

Этот вариант установки задания Крону, мне нравится больше. И хоть он и называется Продвинутый , на мой взгляд проще и удобнее.

Здесь так же как и в первом случае, нужно указать когда будет запускаться команда, так же указываем: Минут ы, Час ы, День , Месяц , День недели и само задание на исполнение в поле Команда . После этого нажимаем кнопку Добавить Cronjob . Задание задано. Страница обновляется:

И Вы можете добавить новое задание, повторив всю процедуру заново. Удалить задание можно нажав на крестик напротив задания справа.

Есть еще один не обязательный параметр, но я рекомендую его прописывать: это адрес электроной почты . На этот адрес будет приходить отчет об исполнении команды. Поле необязательное, но лучше адрес ввести, что бы быть в курсе дела, если что-то пойдёт не так Крон сообщит Вам об этом в письме, а если письмо пришло пустое значит всё ОК!

Что мы написали здесь? Запускать команду в 11 минут, каждого 2-го часа, каждый день, каждый месяц, 1-й, 3-й, 5-й, 7-й дни недели.

В поле выбора: Минут указываете минуту (или минуты) в которую будет запускаться задание, в поле Час указываете час (либо часы) в который(е) будет выполняться задание, а так же день(и), и месяц(ы), в каждом поле можно указать как конкретное время так и интервал.

Например, можно указать не просто 11 минут, а 11-15 (интервал), это значит, что задание будет запускаться каждые 11, 12, 13, 14, 15 минут. Или указать кокретные минуты, например: 11, 14, 18 - это значит что задание будет запускаться на 11, 14, и 18 минутах. Еще можно использовать знак * (звездочка) - обозначает каждый . Если поставить * (звездочку) в поле Минуты, то соотвественно задание будет запускаться каждую минуту, т.е. 60 раз в час.

В каждом поле можно указать, как конкретное время, так и интервал, а также использовать звездочки.

Запись */2 обозначает: каждые 2 часа . Все эти вариаты записей применимы ко всем полям (Минут ы, Час ы, День , Месяц , День недели ) при указании задания Крону. Сами понимаете вариантов может быть миллионы, Запускай задание на выполнение, хоть каждую минуту круглый год. Конечно такая необходимость практически никогда не возникает, но теоретически такая возможность есть.

И еще имейте виду некоторые Хостинги наклыдывают ограничения, на запуск Крона, например не чаще 3 - 10 раз в час. Почему? Создается довольно ощутимая нагрузка на сервер. За нарушение Ваш аккаунт могут заблокировать.

Теперь давайте разберемся как заполняется поле Команда для запуска (в первом варианте) или Команда (во втором варианте).

Задание задаётся следующим образом.

Первым делом вы указываете путь к PHP на Вашем сервере, у меня на сервере путь такой /usr/bin/php у вас может быть другим, уточните у админов вашего сервера, после пути к PHP ставите пробел и пишите полный внутренний путь к файлу который должен запускать Cron . Допустим мне необходимо чтобы Крон запускал файл mail.php , зная внутренний путь к файлу я пишу следующее:

public_html/cron/mail.php

т.е. в корневой папке public_html , есть папка cron в которой лежит файл mail.php а полностью команда на запуск файла mail.php будет вылядеть так:

/usr/bin/php /public_html/cron/mail.php

На разных хостингах, путь до PHP может отличаться, и записываться по разному, корневая папка расположения сайта тоже не всегда бывает public_html , поэтому если нет конкретного примера записи задания Крону, то лучше об этом спросить у администратора, описав что Вы хотите получить в итоге. Хорошая

Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.

Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.

Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

  • /etc/cron.minutely - каждую минуту;
  • /etc/cron.hourly - каждый час;
  • /etc/cron.daily - каждый день;
  • /etc/cron.weekly - каждую неделю;
  • /etc/cron.monthly - каждый месяц.

В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.

Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.

Синтаксис crontab

Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:

минута час день месяц день_недели /путь/к/исполняемому/файлу

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа "*". Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:

* * * * * /usr/local/bin/serve

0 * * * * /usr/local/bin/serve

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

0 0 1 * * /usr/local/bin/serve

Можно в любой день, например, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

30 15 * * 2 /usr/local/bin/serve

Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:

30 15 * * sun /usr/local/bin/serve

Для того чтобы указать определенный интервал нужно использовать символ "-", например, каждый час, с семи утра до семи вечера:

0 7-19 * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель ",". Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16 * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":

*/10 * * * * /usr/local/bin/serve

Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:

  • @reboot - при загрузке, только один раз;
  • @yearly, @annually - раз год;
  • @monthly - раз в месяц;
  • @weekly - раз в неделю;
  • @daily, @midnight - каждый день;
  • @hourly - каждый час.

Например, вот так просто будет выглядеть команда запуска скрипта раз в час:

@hourly /usr/local/bin/serve

Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:

sudo vi /etc/corn.daily/basckup

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

grep CRON /var/log/syslog

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

sudo run-paths /etc/cron.daily/

Выводы

В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.