debian запуск скрипта по расписанию
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
В наших материалах посвященных Ubuntu Server время от времени затрагивается вопрос выполнения каких либо задач по расписанию. Чтобы не объяснять каждый раз одно и тоже мы решили создать данный материал, который должен помочь системным администраторам освоить и эффективно использовать планировщик задач в Linux.
Предусмотрено два типа расписаний cron: пользовательское и системное. Отличаются они тем, что первое создается пользователями и исполняется с учетом пользовательских прав, второе используется в административных или системных целях и может быть запущено от имени любого пользователя.
Чтобы создать или изменить пользовательское расписание наберите команду:
При первом запуске утилита предложит выбрать редактор, мы рекомендуем выбирать mcedit (требует установленного mc), либо другой редактор, с которым вы умеете работать.
Формат строк расписания имеет вид:
Значения минут, часов, дней можно указывать следующим образом:
Рассмотрим следующий пример записи:
Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге Иванова.
Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
Кроме даты можно использовать ряд специальных строк:
Так для ежедневного исполнения нашего скрипта каждую полночь можно написать:
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.
Пример такой записи:
Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт /etc/backup от имени пользователя root.
Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.
Как видим cron достаточно прост в использовании, но в тоже время предоставляет богатые возможности по настройке расписаний в Ubuntu Server. Надеемся данная статья поможет администраторам освоить данный инструмент.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Время планировать задачи
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности, проверка использования дискового пространства, отправка электронных писем, перезагрузка сервера и так далее. В некоторых приложениях, таких как Drupal или Magento, для выполнения определенных задач требуются задания cron.
Задания cron могут быть запланированы по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Про Linux за 5 минут
Что такое файл Crontab
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
/etc/crontab и файлы в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron.
Синтаксис Crontab и операторы
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда для запуска.
Первые пять полей могут содержать одно или несколько значений, разделенных запятой или диапазон значений, разделенных дефисом.
Общесистемные файлы Crontab
Предопределенные макросы
Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.
Команда Crontab
Команда crontab позволяет установить или открыть файл crontab для редактирования. Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:
Переменные Crontab
Демон cron автоматически устанавливает несколько переменных окружения.
Ограничения Crontab
Примеры Cron заданий
Ниже приведены некоторые примеры заданий cron, которые покажут вам, как запланировать выполнение задачи на разные периоды времени.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
планировщик в Linux и запуск по расписанию команд и приложений
Как запустить по расписанию команду?
Для редактирования расписания планировщика cron выполните:
Формат строк расписания имеет вид:
минута час день месяц день_недели команда
Минута — время в минутах от 0 до 59
Час — от 0 до 23
День — день месяца от 1 до 31
Месяц — от 1 до 12 либо буквенные обозначения jan — dec
День недели — от 0 до 6 (0 — воскресенье) или sat — sun
Команда — строка в формате командного интерпретатора которая будет исполнена, допускается запись типа команда1 && команда2 для запуска нескольких команд подряд.
Значения минут, часов, дней можно указывать следующим образом:
Значение — число обозначающее дату или время, допускается подстановочный знак * допускающий полный диапазон значений
Несколько значений — допускается указывать несколько значений через запятую, например 2,14,22
Диапазон значений — указывается через дефис, например 2-10
Шаг значений — указывается через дробь, в знаменатель которой ставится шаг, например */3 — каждое третье значение 0, 3, 6, 9 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.
Рассмотрим следующий пример записи:
0 8-19/2 * * 1 /home/tvs/test01
Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге пользователя tvs.
Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:
* 10-15 * * * /home/tvs/test1
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:
0 10-15 * * * /home/tvs/test1
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
Кроме даты можно использовать ряд специальных строк:
@reboot — выполнять команду при перезагрузке
@yearly или @annually — выполнять 1 января, аналогично записи: «0 0 1 1 * »
@monthly — выполнять 1 числа каждого месяца, аналогично «0 0 1 * * »
@weekly — выполнять каждое воскресенье, равносильно «0 0 * * 0»
@daily или @midnight — ежедневно в полночь,»0 0 * * * »
@hourly — раз в час, «0 * * * * «
Так для ежедневного исполнения нашего скрипта каждую полночь можно написать:
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.
Для системных и административных задач предусмотрен файл /etc/crontab. Синтаксис записей в нем отличается наличием дополнительного значения — пользователя, от чьего имени будет запущено задание:
минута час день месяц день_недели пользователь команда
Пример такой записи:
0 19 * * 1-5 root /etc/backup
Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт/etc/backup от имени пользователя root.
Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.
Скрипты и планировщик задач в ОС Linux
В данном посте обсуждаются базовые принципы написания скриптов и работа планировщика заданий в Oracle Linux. Рассматриваются следующие вопросы:
1. Скрипты в ОС Linux
Скрипты в ОС на базе Linux – это набор команд, записанных в файл. Это делается с целью быстрого и удобного вызова последовательности этих команд. Скрипты могут выполнять самые разные задачи – от автоматизации рутинных действий системного администратора до реализации сложных алгоритмов для ИТ инфраструктуры. При этом результаты работы команд могут служить входными данными для других задач (команд).
Для того, чтобы превратить файл с набором команд в скрипт, понадобятся две вещи. Во-первых, в первой строке пустого файла необходимо прописать путь к командной оболочке, которая будет исполнять данный файл. В большинстве дистрибутивов Linux данной оболочкой является Bash, и соответственно первой строкой будет #!/bin/bash. В других строках символ решетки используется для обозначения комментариев, которые не будут обработаны оболочкой. Однако, первая строка — это особый случай, здесь решетка, за которой следует восклицательный знак (эту последовательность называют шебанг) и путь /bin/bash, указывают системе что данный скрипт создан именно для оболочки bash. Во вторых, чтобы скрипт запустить как исполняемый файл, ему необходимо дать права на исполнение, иначе, попытка его запуска даст ошибку Permission denied.
Пример ошибки, когда запускается неисполняемый файл:
Права на исполнение даются командой chmod. Например,
chmod +x filename.sh
Данная команда дает всем пользователям операционной системы право на запуск файла с именем filename.sh
Право на запуск того же файла только владельцу можно дать следующей командой: chmod u+x filename.sh.
Ниже рассматривается пример написания простейшего скрипта, копирующего все файлы из папки /home/rustam/Documents в папку /tmp/backup.
При работе со скриптами могут использоваться переменные. Они позволяют хранить в файле сценария различную информацию, например, результаты работы одних команд для дальнейшего их использования для других команд.
Исполнение отдельных команд без хранения результатов работы ограничивают их возможности.
Существуют два типа переменных, которые используются в bash-скриптах:
Используются при необходимости работы с системными данными в командах оболочки. Например, требуется вывести домашнюю директорию текущего пользователя. Список переменных для среды конкретного пользователя выдается командой env.
В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в скрипте свои собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария. Как и в случае с системными переменными, к пользовательским переменным обращаются используя знак доллара:
Дополним соответствующим образом скрипт, написанный ранее – добавляется переменная для хранения пути к папке, в которую осуществляется копирование.
2. Что такое планировщик заданий. Работа сервиса cron.
Часто возникают ситуации, в которых приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. В этом случае удобно, если скрипт выполняет необходимые команды без участия пользователя. Для этого настраивается автоматический запуск требуемого скрипта в заданное время.
Для указанной настройки в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять необходимые скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное время или через любой интервал времени. Сервис cron также часто используется другими службами операционной системы.
Как и большинство других сервисов Linux, cron запускается при старте системы и работает в фоновом режиме. Его основная задача – выполнять требуемые процессы в заданное время. Существует несколько конфигурационных файлов, из которых берется информация о том, что и когда нужно выполнять. Cron открывает файл /etc/crontab, в котором указываются необходимые данные.
Для настройки времени, даты и интервала выполнения задания, используется специальный синтаксис файла cron и специальная команда. Не рекомендуется непосредственно редактировать файл /etc/crontab. Вместо этого используется команда crontab. Ниже запускается команда crontab с ключом –e для редактирования файла
Файлы crontab, используемые для управления работой планировщика, располагаются в каталоге /etc/cron.d/. Кроме того, в каталогах /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).
Вывод содержимого текущего файла позволяет команда:
Таблица crontab состоит из 6 колонок, которые разделяются пробелами или табуляторами. Первые пять колонок отвечают за время выполнения, соответственно, минута, час, день месяца, месяц, день недели. В них может находиться: число, список чисел (1,2,3), диапазон чисел (1-3), символы * или /. Все остальные символы в строке интерпретируются как выполняемая команда с ее параметрами – можно указать как саму команду (например, echo “Доброе утро”), так и путь к исполняемому скрипту.
Как запускать скрипты через cron
Скрипты запускаются через cron, указанием команды либо пути к скрипту в последней колонке.
Обязательно требуется прописывать полный путь к команде, так как для команд, запускаемых от имени сервиса cron, переменная пользовательской среды PATH будет отличаться, и сервис не сможет найти команду.
Пример запуска ранее созданного скрипта filename.sh, который копирует файлы каждый день в 23:00:
или копирует файлы каждые 5 минут:
3. Примеры
Ниже приведены примеры настройки и работы cron:
0 17 * * 1-5 echo “Рабочий день закончен – эта надпись выводится в 17:00 с понедельника по пятницу”
15 6 * * sun echo “Выполняется в 6:15 в воскресенье”
30 12,13 * * 1,3 echo “Эта надпись выводится в понедельник и среду в 12:30 и 13:30”
Настройка Cron в Linux Debian
Crontab — это команда, используемая для установки, удаления или вывода файла конфигурации cron, используемого для управления демоном cron. Каждый пользователь может иметь свой собственный файл задач crontab, и хотя эти файлы хранятся в /var/spool/cron/crontabs, они не предназначены для прямого редактирования. Вам нужно использовать команду crontab для редактирования или настройки ваших собственных заданий cron.
Системный Сrontab: Обычно используется системными службами и критическими заданиями, требующими привилегий root доступа. Шестое поле (см. ниже описание поля) — это имя пользователя которое по умолчанию присвоено команде. Это дает системе возможность запускать команды от разных пользователей.
Пользовательский crontab: Пользователь может установить свои собственные задания cron, используя команду crontab. Шестое поле — это команда для запуска, и все команды будут выполняться от пользователя, который задал их в своем собственном crontab.
Создать или отредактировать собственные задания cron:
Синтаксис:
Где цифры обозначают:
Более понятным языком:
Параметры команды Crontab
Следующие файлы ограничивают доступ к планировщику (по умолчанию они не существуют):
Используйте специальную строку:
Вместо первых пяти полей вы можете использовать любую из восьми специальных строк. Это не только сэкономит ваше время, но и улучшит читаемость.
Как использовать операторы?
Первым делом необходимо определить среду. Если указатель оболочки упущен, cron будет использовать значение по умолчанию, которое равно sh. Если переменная PATH не указана, расположение файлов будет абсолютным. Если перемененная HOME упущенная, cron будет использовать домашний каталог.
Кроме того, cron считывает файлы в каталоге /etc/cron.d/. Обычно это файлы демона системы, такие как sa-update или sysstat. В качестве пользователя root, для настройки заданий cron, вы можете использовать каталоги которые указаны ниже. Здесь вы можете напрямую запускать свои скрипты. Команда run-parts запускает скрипты или программы в каталоге через /etc/crontab файл:
Сохранение списка заданий в файл