Настройка cron в linux
Для выполнения конкретных задач по расписанию, или периодически, через равный промежуток времени (регулярных действий) в линуксе (да и вообще в UNIX-подобных ОС), существует утилита cron. Это программа-демон (служба, по аналогии с Windows), которая постоянно размещена и работает в оперативной памяти компьютера, сканируя раз в минуту список установленных задач на наличие актуальной для выполнения в текущий момент времени. Сами инструкции по запуску задач находятся в специально предназначенных crontab-файлах, которые, в свою очередь, находятся в строго отведённых каталогах системы.
Историческая справка
Утилита была разработана ещё в начале 70-х годов прошлого столетия, когда Кен Томпсон и Деннис Ритчи создали ОС UNIX. Они работали над проектом по созданию многозадачной и многопользовательской системы Multics, в котором принимали участие компании AT&T и Bell Labs. В то время подобная система была настолько высокотехнологичным и прорывным продуктом, что позже Bell Labs отказалась от активного участия в проекте из-за крайне низкой востребованности подобного рода систем для широкого потребления.
Однако, используя наработки из проекта Multics, Томпсон и Ритчи на этой основе и на волне энтузиазма создали ОС UNIX. Такая мощная и прорывная платформа для полноценного раскрытия своего функционала нуждалась в обеспечении её функционалом в виде специализированного ПО и утилит, одной из которых и по сей день является cron. Разработчиком утилиты является Кен Томпсон.
Функционал и основные компоненты примеры cron
Описания регулярных действий, запускаемых утилитой– это так называемая crontab-таблица, которая имеет строго определенный формат. Она состоит из 6 колонок, разделённых табуляторами или пробелами, первые 5 из которых определяют время запуска действия. Последняя колонка интерпретируется как команда запуска, т. е. само действие.
0 5 * * 1 tar -zcf var/backups/home.tgz /home/
Приведённое описание действия означает запуск резервного копирования (путём архивирования и помещения созданного архива в var/backups/) всех каталога /home каждую неделю (по понедельникам) в 5 утра. Как видно, сначала задаётся колонка минут, затем часов, дней, месяцев и дней недели. Далее следует команда запуска, в данном случае для создания архива. В колонках, определяющих время могут использоваться числа, группы чисел, разделяемых запятыми, диапазоны чисел, разделяемых дефисом, а также символы «*» и «/». Каждому действию соответствует строка описания в crontab-файле. В приведённом примере цифра «1» означает порядковый номер дня недели — понедельник, соответственно «2» — вторник, «3» — среда и т. д., причём воскресенье это «0» или «7». Символ «*» означает любое значение с учётом валидности для соответствующего параметра. Для задания шага значений используется символ «/», например:
23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."
Пример настройки планировщика на выполнение задачи каждые 5 минут выглядит так
*/5 * * * * echo "Выполняется каждые 5 минут"
*/1 * * * * echo "Выполняется каждую минуту"
* */1 * * * echo "Выполняется каждый час"
каждое первое число февраль, июль и ноябрь в 2.30
10 00 01 02,07,11 * echo "каждое первое число февраль, июль и ноябрь в 0.10"
00,30 * * * * echo "каждые полчаса"
* * * * 6,7 echo "суббота и воскресенье"
00 10,15,20 * * * echo "будет выполняться каждый день в 10.00 и 15.00, 20.00"
один раз в день с 00 до 09 часов по буднем.
00 00-09 * * 1-5 echo "будет выполняться с 00 до 09 часов по буднем"
Для добавления скрипта в крон нужно прописать полный путь к скрипту. Пример
00 01 * * * /etc/scripts/script.sh
В данном примере скрипт /etc/scripts/script.sh будет запускаться каждый день в час ночи. Существуют два типа crontab-файлов: системные и пользовательские. В отличие от пользовательских, в системных после колонок задания времени используется еще колонка для указания пользователя, от которого выполняется действие:
17 * * * * root cd / && run-parts —report /etc/cron.hourly
Кроме того, местоположение системных и пользовательских crontab-файлов различается: файлы, используемые для действий, управляющих системой находятся в /etc/cron.d/, а файлы, создаваемые для отдельных пользователей хранятся по адресу /var/spool/cron/crontabs/.
Для корректной работы утилиты необходимо в файлах crontab указывать оболочку командного интерпретатора, а также добавлять домашний каталог пользователя в PATH:
SHELL=/bin/sh PATH=/bin:/usr/bin:/home/paul/bin
При необходимости можно также указать электронный адрес пользователя:
Если в описании действия команда отправляет текстовое содержимое в стандартный вывод, то программа, при наличии электронного адреса, автоматически перехватит это сообщение и отправит по e-mail.
Использование cron
Файлы crontab нельзя редактировать вручную, т. к. это может вызвать сбой в цикле обработки этих файлов, когда демон сканирует их для анализа описаний действий. Для редактирования пользовательского файла crontab существует команда:
При первом своём запуске эта команда сначала предложит выбрать один из имеющихся в системе текстовых редакторов, после чего откроет файл для редактирования.
Для просмотра используемого в данный момент crontab-файла используется команда:
Будьте аккуратны с этой командой, она удаляет всю таблицу задач без предупреждения!
Важно заметить, что команда «crontab -e» также используется для создания пользовательского файла. Сначала файл будет создан в каталоге /tmp/ и лишь позже cron самостоятельно скопирует его в каталог пользовательских crontab-файлов, задав ему имя соответствующего пользователя, т. е. того, кем он был изначально создан.
Не стоит пугаться директории /tmp/ — файлы crontab в ней не потеряются.
Некоторые особенности cron
Утилита обладает рядом особенностей, которые необходимо учитывать при работе с ней и составлении описаний регулярных действий:
- Минимальное время составляет одну минуту.
- Файл crontab должен всегда заканчиваться пустой строкой
- Условия времени запуска «день недели» и «день месяца» обрабатываются через логическую операцию «ИЛИ», все остальные условия — через логическое «И».
- Выводы запускаемых команд выводятся в виде сообщений пользователю, но если в файле crontab была определена директива MAILTO – сообщение будет отправлено по указанному в этой директиве e-mail.
Узнать, запущена ли в данный момент утилита крон, позволяет команда:
Для запуска и остановки можно также использовать:
service cron start service cron stop
systemctl start cron systemctl stop cron
Логи Cron
Логи по работе запуска программы в каждой системе хранятся по разному. Например в Centos это /var/log/crond, в Ubuntu /var/log/syslog. Так же, если не указанно MAILTO, вывод команд работы скриптов которые запускает крон, можно посмотреть в каталоге /var/spool/mail. В файле пользователя из под которого запускается программа.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
В процессе работы с операционной системой (ОС) пользователю нередко приходится подключать различные устройства хранения.
У начинающих пользователей Linux часто возникает вопрос, каким же образом установить какое-либо программное обеспечение
Трудно не согласиться с тем, что современное оборудование, не имеющее «на борту» температурные датчики
Для системных администраторов данная тема является чуть ли не первоочередной по важности. Ведь обычно
Нередко начинающие пользователи Linux сталкиваются с некоторыми особенностями этих систем. Чаще всего это проявляется
Alt linux crontab e
Источник: docs.altlinux.org ALT Linux – один из самых известных и популярных в России дистрибутивов Linux, разработанный с учетом русскоязычной аудитории. Основные преимущества ALT Linux включают в себя высокую стабильность работы, доступность и активное сообщество пользователей. Однако наиболее важной функцией ALT Linux, как и любого другого дистрибутива Linux, является возможность автоматизации. Именно с ней мы сегодня и столкнемся, исследуя автоматизацию задач с использованием таких инструментов, как Cron и Systemd.
Установка ALT Linux представляет собой достаточно простой процесс, который включает в себя загрузку дистрибутива с официального сайта, запись его на флешку или диск и установку на целевой компьютер. После успешной установки мы можем приступить к автоматизации.
Автоматизация с использованием Cron
Первым инструментом для автоматизации задач, который мы рассмотрим, является Cron. Cron – это классический планировщик задач для Unix-подобных операционных систем, который позволяет автоматизировать выполнение задач по расписанию.
Чтобы использовать Cron для автоматизации, нужно создать задачу. Задача в контексте Cron – это команда или скрипт, который нужно выполнить, и время, когда его нужно выполнить.
Пример задачи для Cron выглядит следующим образом:
Это задание будет выполняться каждую минуту. Звездочки обозначают минуты (0-59), часы (0-23), дни месяца (1-31), месяцы (1-12) и дни недели (0-7, где 0 и 7 — это воскресенье), соответственно. В нашем случае, звездочки в каждом поле означают «любое время».
Создать новую задачу для Cron можно, отредактировав crontab, с помощью команды crontab -e. Посмотреть текущий список задач можно командой crontab -l.
Автоматизация с использованием Systemd
Systemd – это современная система инициализации и менеджер служб для Linux, предоставляющая намного больше возможностей для автоматизации, чем Cron.
В Systemd для автоматизации используются единицы, называемые службами (services) и таймерами (timers). Служба описывает, что нужно выполнить, а таймер — когда это нужно сделать.
Создание новой службы в Systemd включает в себя создание файла с расширением .service в каталоге /etc/systemd/system/. В этом файле описывается задача, которую нужно выполнить. Например:
[Unit] Description=My Script [Service] ExecStart=/path/to/script.sh
Таймер создается аналогичным образом, но в файле с расширением .timer, и он связывается со службой:
[Unit] Description=Run my script every hour [Timer] OnCalendar=hourly Unit=my_script.service [Install] WantedBy=timers.target
Включить новый таймер можно командой systemctl enable —now my_script.timer. Посмотреть список активных таймеров можно командой systemctl list-timers.
Таким образом, автоматизация задач в ALT Linux с использованием Cron и Systemd – это мощный инструмент для управления повторяющимися и планируемыми задачами, который может существенно упростить и улучшить процесс управления системой.