- НАСТРОЙКА CRON
- НАСТРОЙКА CRON
- Введение
- Базовая настройка CRON
- Настройка cron для web программистов
- Список всех задач cron у всех пользователей в Linux
- ОТЛАДКА РАБОТЫ cron
- Делаем «жизнь» в Linux проще или автоматизация запуска процессов с помощью cron
- Настройка планировщика задач Cron в CentOS Linux
- Установка cron в Linux
- Crontab: добавление задания в планировщик cron
- Отправка уведомлений cron на e-mail
- Файлы конфигурации и логи планировщика cron
НАСТРОЙКА CRON
НАСТРОЙКА CRON
Введение
Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.
Базовая настройка CRON
Шаблон задания для Cron выглядит примерно так:
Вот иллюстрация этого же шаблона, которую можно сохранить себе:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Звёздочками обозначены конкретные блоки времени.
Для отображения содержимого crontab-файла текущего пользователя используйте команду:
Для редактирования заданий пользователя есть команда:
Ниже приведены несколько примеров cron-заданий:
- Чтобы выполнять команду каждую минуту, задание должно быть такое:
- Похожее задание, только команда будет вызываться каждые пять минут:
- Вызывать команду 4 раза в час (каждые 15 минут):
- Чтобы выполнить команду каждый час в 30 минут, пишем:
Т. е. команда будет выполняться не каждые 30 минут, а тогда, когда значение минут будет равно 30 (например, 10:30, 11:30, 12:30 и т. д.).
Ещё существуют готовые задания:
Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:
Команда для очистки всех заданий текущего пользователя:
Настройка cron для web программистов
1. Добавляем в cron задачу, которая будет выполнятся каждую минуту.
Набираем crontab -e и добавляем (будет выполняться под тем пользователем под кем вы зашли в SSH)
*/1 * * * * /usr/bin/php -q /server/cron/cron.php > /dev/null 2>&1
сохраняемся (SHIFT+Z 2раза )
Примечаие:
*/1 * * * * — означает что скрипт будет запускаться каждую минуту
> /dev/null — означает отправку результатов, которые выдаст скрипт, в никуда.
2>&1 — избавляет администратора сервера от писем, если скрипт закончит работу с ошибками
2. для отправки на почту воспользуемся mutt (почтовый клиент)
2.1. apt-get install mutt
2.2. Набираем crontab -e и добавляем
0 */1 * * * /usr/bin/php -q /server/cron/cron.php > /server/cron/cron.txt && mutt my@email.com -s cron-result Фактически, Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab (тут могут быть тоже прописаны задачи) и они не будут отображаться по команде crontab – l
Так же существует anacron (anachronistic cron или асинхронный (анахроничный) cron) и его запуск и его задания тоже нужно учитывать, см. файл /etc/anacrontab и каталоги /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.monthly/ и /etc/cron.weekly/
Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:
§ /etc/cron.minutely — каждую минуту;
§ /etc/cron.hourly — каждый час; ( cat /etc/cron.d/0hourly — тут настроен)
§ /etc/cron.daily — каждый день;
§ /etc/cron.weekly — каждую неделю;
§ /etc/cron.monthly — каждый месяц.
Список всех задач cron у всех пользователей в Linux
1. /etc/crontab (можно посмотреть глазами cat /etc/crontab)
2. Клиентский crontab ( crontab -u user -l)
3. /etc/anacrontab (можно посмотреть глазами cat /etc/anacrontab)
4. /etc/cron.d/ (Кроме того, cron считывает файлы в каталоге /etc/cron.d/)
5. /etc/cron.daily/ Запуск всех скриптов один раз в день
6. /etc/cron.hourly/ Запуск всех скриптов один раз в час
7. /etc/cron.monthly/ Запуск всех скриптов один раз в месяц
8. /etc/cron.weekly/ Запуск всех скриптов один раз в неделю
Для того чтобы пройти руками все клиентские Клиентский crontab ( crontab -u user -l), можно автоматизировать для всех пользователей очевидно нужно взять список пользователей в системе из /etc/passwd и сделать для каждого пользователя crontab -u USERNAME -l, то есть:
for user in $( cut -d ‘:’ -f1 /etc/ passwd ); do crontab -u $user -l; done |
Недостаток этого решения очевиден:
1. Нужно всегда помнить эту команду.
2. Если у пользователя нет задач в планировщике то мы получим сообщение «no crontab for vasua» и таких сообщений может быть десятки если у вас много пользователей — это неудобно.
3. Вывод информации неудобно читать.
Решение простое — создадим функцию allcrontab в файле
/.bashrc для ввода информации в более удобном виде:
# Определим цвета вывода |
red= ‘\e[0;31m’ |
RED= ‘\e[1;31m’ |
green= ‘\e[0;32m’ |
GREEN= ‘\e[1;32m’ |
NC= ‘\e[0m’ |
# Определим нашу функцию вывода списка всех задач cron у всех пользователей |
function allcrontab() < |
for user in $( cut -d ‘:’ -f1 /etc/ passwd ); do |
usercrontab=$( crontab -l -u $ |
if [ -n «$ |
echo -e «$ |
crontab -l -u $ |
echo -e «$ |
fi |
done |
> |
/.bashrc или перелогиниваемся и выполняем в консоле allcrontab и видим красивый вывод списка всех задач cron у всех пользователей:
Но это не финишная прямая, а только начало, ведь опытный системный администратор знает, что кроме вывода списка заданий командой crontab -l -u USER есть еще задания планировщика в каталоге /etc/cron.d/ и это тоже нужно учитывать, потому что например панель хостинга ISPConfig сохраняет задания cron в каталоге /etc/cron.d/ с именами ispc_webXXX, где webXXX — это логин системного пользователя, например web30 и вывод crontab -l -u web30 нам скажет «no crontab for web30», а на самом деле в файле /etc/cron.d/ispc_web30 может быть такая картина:
SHELL= ‘/bin/sh’ |
*/2 * * * * web30 /usr/bin/php -f /var/www/mysite.ru/web/yii cron -origin/index |
ОТЛАДКА РАБОТЫ cron
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Обычно он находится в /var/log/cron
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
Источник
Делаем «жизнь» в Linux проще или автоматизация запуска процессов с помощью cron
Введение
Демоны atd и cron
Если ваш компьютер, вдруг, как кажется, без причины, начнёт производить поиск по диску, присылать вам почту и т.д., то, скорее всего, это работа демона cron…
Михаэль Кофлер «Linux. Установка, настройка, администрирование.» — СПб.: Питер, 2014
Итак, что же именно делает этот самый cron. Демон активируется с интервалом в одну минуту, проверяет файлы crontab и запускает указанные в них программы. Изначально он применяется в ходе работ по поддержанию системы, но пользователь может использовать его для решения своих задач.
Если у вас установлен обычный дистрибутив, то вам не о чем беспокоится, cron инсталлируется автоматически. Если же минимальный, то не расстраиваемся — идём в терминал.
Доступ юзерам к демону, настраивается в каталоге /var/spool/cron/tabs/user. Их права задаются в файлах /cron/allow и /deny. Добавляя пользователя в /allow мы разрешаем ему выполнять команду cron, а если добавить пользователя в /deny, то наоборот, пользователю будет запрещено пользоваться демоном.
Сам cron настраивается в каталоге /etc/crontab. Файл /crontab или файлы в /etc/cron. d содержат список команд, предназначенных для выполнения. Синтаксис таков:
Например, если мне понадобится пинговать ya.ru через каждые 15 минут от имени суперюзера, то мне необходимо добавить следующее:
Если в любом из первых пяти полей стоит символ *, то это поле игнорируется. В предыдущей команде не указаны ни месяц, ни неделя, следовательно, она будет выполнятся каждые 15 минут. Чтобы изменить конфигурацию воспользуйтесь в терминале командой vi или вручную измените содержание файла /etc/crontab.
Работа с .hourly, .daily, .weekly, .monthly
По умолчанию почти во всех дистрибутивах, файл /etc/crontab содержит всего несколько записей, необходимых для выполнения сценариев:
/etc/cron.hourly/* — сценарии выполняющиеся каждый час
/etc/cron.daily/* — сценарии выполняющиеся каждый день
/etc/cron.weekly/* — сценарии выполняющиеся каждую неделю
/etc/cron.monthly/* — сценарии выполняющиеся каждый месяц
Чтобы демон выполнял ваши команды, добавьте сценарий выполняющий команды в один из каталогов. Не забудьте установить бит execute(chmod a+x файл). Если вы этого не сделаете, то у вашего сценария просто не будет доступа и он выполнятся не будет!
Для проверки, будет ли запускаться ваш сценарий, выполните команду
Если сценарий расположен в другом каталоге, то соответственно меняйте daily на monthly и т.д.
И помните, в имени сценария не может быть точек, любые символы, кроме точек. Команда run-parts просто-напросто игнорирует сценарии с точкой, не знаю почему.
Источник
Настройка планировщика задач Cron в CentOS Linux
Cron — это планировщик задач, работающий в Unix-подобных операционных системах, включая все дистрибутивы Linux. Демон cron работает на сервере в фоновом режиме и запускает по расписанию запланированные задачи. В этой статье мы рассмотрим установку cron на сервер с Linux CentOS 8, познакомимся с синтаксисом cron, научимся добавлять в него различные задачи, управлять расписанием запуска.
Установка cron в Linux
По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:
# dnf update -y — обновить все ПО на сервере
# dnf install crontabs -y — установите cron
В моем случае cron уже был установлен:
После установки, демон crond нужно добавить в автозагрузку и запустить:
# systemctl enable crond.service
# systemctl start crond.service
Crontab: добавление задания в планировщик cron
Для добавления задач в cron можно использовать команду:
Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это vi, но можно изменить на удобный для вас, например nano). Настройка заданий таким способом исключает, что вы допустите ошибку в синтаксисе. Редактор crontab просто не даст сохранить файл с ошибками.
Также можно отредактировать файл заданий cron вручную через mc:
# mcedit /var/spool/cron/root – имя файла может отличаться, в зависимости от того, под каким пользователем вы работаете.
Чтобы добавить простое задание по запуск bash скрипта в cron, выполните:
Теперь добавьте расписание задания и путь к файлу скрипта:
Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).
Если все сделали верно, ваше задание будет добавлено. Чтобы вывести список заданий cron, выполните:
Данный скрипт будет запускаться через cron ежеминутно.
Каждая запись расписания crontab состоит из 5 полей:
Можно использовать следующие допустимые значения для каждого из полей:
Поле | Диапазон значений |
минуты | 0-59 |
часы | 0-23 |
день месяца | 1-31 |
месяц | 1-12 или jan feb mar apr may jun jul aug sep oct nov dec |
день недели | 0-6 (где 0 это воскресение) или sun mon tue wed thu fri sat |
Знак * означает все допустимые значения. Пример задания:
Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:
Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:
Или исползовать более короткий синтаксис с запятой:
Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:
* */2 * * *
Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:
Еще несколько примеров расписаний для cron:
- запуск по будням в 12:00 и 18:00: 0 12,18 * * 1-5
- каждые 30 минут: */30 * * * *
- каждую субботу: 0 0 * * 6
- каждый вторник и четверг в 2:00 ночи: 0 2 * * 2,4
Еще в cron можно использовать специальные переменные.
Переменная | Описание | Эквивалент |
@reboot | Запускается один раз при загрузке | |
@yearly | один раз в год | 0 0 1 1 * |
@monthly | один раз в месяц | 0 0 1 * * |
@weekly | один раз в неделю | 0 0 * * 0 |
@daily | один раз в день | 0 0 * * * |
@hourly | ежечасно | 0 * * * * |
@midnight | В полночь |
Т.е. для запуска задания раз в день можно использовать формат:
@daily echo «Проверка cron»
Можно отредактировать cron файл другого пользователя:
# crontab -u username
Отправка уведомлений cron на e-mail
Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.
# dnf install sendmail -y
# service sendmail start
sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.
Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:
MAILTO — укажите свой почтовый ящик
SHELL — оболочка пользователя
HOME — путь к файлу cron
После каждого запуска задачи на указанный email отправляется уведомление:
Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:
* * * * * echo «Проверка cron» >> /var/log/admin/journal.log
Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:
* * * * * echo «Проверка cron» >> /dev/null 2>&1
Таким образом вы можете отделить некоторые задания, чтобы не отправлять уведомления о всех задания себе на почтовый ящик.
Файлы конфигурации и логи планировщика cron
Основной файл конфигурации демона cron — /etc/crontab. Помимо cron-файла, задачи можно запускать из следующих директорий:
- /etc/cron.daily – запуск скриптов один раз в день
- /etc/cron.hourly – запуск скриптов ежечасно
- /etc/cron.monthly – запуск скриптов раз в месяц
- /etc/cron.weekly – запуск скриптов раз в неделю
Просто разместите нужны скрипты в нужную директорию, и они будут выполняться согласно расписания.
Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.
В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.
Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:
Источник