Linux запуск команды по расписанию

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

Cron — точно по расписанию.

В наших материалах посвященных Ubuntu Server время от времени затрагивается вопрос выполнения каких либо задач по расписанию. Чтобы не объяснять каждый раз одно и тоже мы решили создать данный материал, который должен помочь системным администраторам освоить и эффективно использовать планировщик задач в Linux.

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

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

Чтобы создать или изменить пользовательское расписание наберите команду:

При первом запуске утилита предложит выбрать редактор, мы рекомендуем выбирать mcedit (требует установленного mc), либо другой редактор, с которым вы умеете работать.

Формат строк расписания имеет вид:

  • Минута — время в минутах от 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 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.

Рассмотрим следующий пример записи:

Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге Иванова.

Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:

Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:

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

Кроме даты можно использовать ряд специальных строк:

  • @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 синтаксис записей в нем отличается наличием дополнительного значения — пользователя, от чьего имени будет запущено задание:

Пример такой записи:

Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт /etc/backup от имени пользователя root.

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

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

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Или подпишись на наш Телеграм-канал:

Источник

Linux запуск команды по расписанию

Chapter 5. Утилиты командной строки

Читайте также:  Linux disk partition utilities

Запуск команд по расписанию

crontab: Уведомление или редактирование вашего файла crontab

crontab — это команда, которая позволяет вам периодически выполнять команды через определенные промежутки времени с тем преимуществом, что вам нет необходимости входить в систему. crontab отправит вам письмо с отчетом о выполнении вашей команды. Вы можете указывать интервалы в минутах, часах, днях и даже месяцах. В зависимости от указанных опций, crontab будет работать по-разному:

  • -l : Вывод вашего текущего файла crontab .
  • -e : Редактирование вашего файла crontab .
  • -r : Удаление вашего текущего файла crontab .
  • -u : Применение одной из перечисленных выше опций для . Это может сделать только root .

Давайте начнем с редактирования crontab ‘а. Если вы введёте команду crontab -e , перед вами окажется ваш любимый текстовый редактор, если у вас установлена переменная окружения EDITOR или VISUAL , в противном случае будет использован Vi. Строка в файле crontab состоит из шести полей. Первые пять полей — это интервалы времени в минутах, часах, днях, месяцах и днях недели соответственно. Шестое поле — это выполняемая команда. Строки, начинающиеся с # — это комментарии, они будут проигнорированы демоном crond (программой, отвечающей за выполнение заданий из crontab ). Вот пример файла crontab :

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

Существует еще несколько способов указания интервалов, кроме того, что показан в этом примере. Например, вы можете указать набор дискретных значений , разделённых запятыми ( 1,14,23 ) или диапазон ( 1-15 ), или даже комбинировать их ( 1-10,12-20 ), а можно и с некоторым шагом ( 1-12,20-27/2 ). Теперь вашей задачей будет найти полезные команды и поместить их в этот файл!

at: Выполнение команды по расписанию, но только один раз

Возможно, вы хотели бы выполнить какую-нибудь команду в определённый день, но не регулярно. Например, вам нужно напомнить себе о сегодняшней встрече в 18:00. Вы работаете в X, у вас установлен пакет X11R6-contrib и вы хотели бы получить напоминание, скажем, в 17:30 о том, что пора выходить. Тогда at — это то, что вам нужно:

Указывать время можно разными способами:

  • now + : Означает сейчас + интервал (Не обязателен. Отсутствие интервала означает немедленное выполнение). Синтаксис для интервала: (minutes|hours|days|weeks|months). Здесь minutes — минуты, hours — часы, days — дни, weeks — недели и months — месяцы. Например, вы можете указать now + 1 hour (через один час), now + 3 days (через трое суток) и так далее.
  • : Полное указание даты. Опция (время) является обязательной. Её формат для at довольно свободный: вы, например, можете ввести 0100 , 04:20 , 2am , 0530pm , 1800 или одно из трех специальных значений: noon (полдень), teatime (время вечернего чая в 16:00) или midnight (полночь). Опция (день) является необязательной. Вы также можете указать её различными способами: например, 12/20/2004 , что соответствует двадцатому декабря 2004 года, или, по европейскому стандарту, 20.12.2004 . Вы можете не указывать год, но тогда допускается только европейская форма записи: 20.12 . Также вы можете записать месяц буквами: и Dec 20 , и 20 Dec будут верны.

Также at допускает использование разнообразных опций:

  • -l : Выводит список заданий, стоящих в очереди на выполнение. Первое поле представлет собой номер задания. Это эквивалент команды atq .
  • -d : Удаляет из очереди задание под номером . Вы можете получить номера заданий при помощи команды atq . Это эквивалент команды atrm .

Как обычно, для получения дополнительной информации смотрите страницу руководства для at(1).

find: Поиск файлов по определенным критериям

Источник

Запуск скриптов по расписанию

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

В Linux имеется утилита crontab, позволяющая планировать запуск скриптов, которые нужно выполнять регулярно.

Crontab выполняется в фоне и, основываясь на данных в так называемых cron-таблицах, запускает задания по расписанию.

Для того, чтобы просмотреть существующую таблицу заданий cron, воспользуйтесь такой командой:

При планировании запуска скрипта по расписанию crontab принимает данные о том, когда нужно выполнить задание, в таком формате:

минута, час, день месяца, месяц, день недели.

Например, если надо, чтобы некий скрипт с именем command выполнялся ежедневно в 10:30, этому будет соответствовать такая запись в таблице заданий:

Читайте также:  Восстановление поврежденных файлов системы windows

30 10 * * * command

Здесь универсальный символ «*», использованный для полей, задающих день месяца, месяц и день недели, указывает на то, что cron должен выполнять команду каждый день каждого месяца в 10:30.

Если, например, надо, чтобы скрипт запускался в 4:30PM каждый понедельник, понадобится создать в таблице заданий такую запись:

30 16 * * 1 command

Нумерация дней недели начинается с 0, 0 означает воскресенье, 6 — субботу.

Вот ещё один пример. Здесь команда будет выполняться в 12 часов дня в первый день каждого месяца.

00 12 1 * * command

Нумерация месяцев начинается с 1.

Для того чтобы добавить запись в таблицу, нужно вызвать crontab с ключом -e:

Затем можно вводить команды формирования расписания:

30 10 * * * /home/likegeeks/Desktop/myscript

Благодаря этой команде скрипт будет вызываться ежедневно в 10:30.

Если вы столкнётесь с ошибкой «Resource temporarily unavailable», выполните нижеприведённую команду с правами root-пользователя:

$ rm -f /var/run/crond.pid

Организовать периодический запуск скриптов с использованием cron можно ещё проще, воспользовавшись несколькими специальными директориями:

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

Источник

Как запустить команду на определенное время в Linux

На днях я переносил большой файл с помощью rsync в другую систему в моей локальной сети.

Поскольку это очень большой файл, для его завершения потребовалось около 20 минут.

Я не хочу ждать так долго, а также я не хочу вручную завершать процесс нажатием CTRL + C.

Мне просто интересно, могут ли быть какие-нибудь простые способы запустить команду в течение определенного времени и автоматически убить ее, как только истечет время в Unix-подобных операционных системах – отсюда и этот пост.

Выполнить команду в течение определенного времени в Linux

Метод 1 – Использование команды « timeout »

Команда timeout является частью пакета GNU coreutils, поэтому она предустановлена во всех системах GNU / Linux.

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

Например, следующая команда прекратит работу через 10 секунд.

Другие доступные суффиксы:

“m” в течение нескольких минут,
“h” Часы
“ d” в течение нескольких дней.

Если вы запустите эту команду tail -f /var/log/pacman.log, она будет работать до тех пор, пока вы не завершите ее вручную, нажав CTRL + C.

Однако, если вы запустите его вместе с командой timeout, он будет автоматически убит через заданный интервал времени.

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

В этом случае, если команда tail все еще выполняется через 10 секунд, команда timeout отправит ему сигнал уничтожения через 20 секунд и завершит его.

Команда Tmeout может быть особенно полезна при устранении неполадок оборудования.

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

Для более подробной информации, обратитесь к справочным страницам.

Источник

Скрипты и планировщик задач в ОС Linux

В данном посте обсуждаются базовые принципы написания скриптов и работа планировщика заданий в Oracle Linux. Рассматриваются следующие вопросы:

  • Скрипты в ОСLinux
  • Что такое планировщик заданий
  • Работа сервисаcron
  • Примеры

1. Скрипты в ОС Linux

Скрипты в ОС на базе Linux – это набор команд, записанных в файл. Это делается с целью быстрого и удобного вызова последовательности этих команд. Скрипты могут выполнять самые разные задачи – от автоматизации рутинных действий системного администратора до реализации сложных алгоритмов для ИТ инфраструктуры. При этом результаты работы команд могут служить входными данными для других задач (команд).

Для того, чтобы превратить файл с набором команд в скрипт, понадобятся две вещи. Во-первых, в первой строке пустого файла необходимо прописать путь к командной оболочке, которая будет исполнять данный файл. В большинстве дистрибутивов Linux данной оболочкой является Bash, и соответственно первой строкой будет #!/bin/bash. В других строках символ решетки используется для обозначения комментариев, которые не будут обработаны оболочкой. Однако, первая строка — это особый случай, здесь решетка, за которой следует восклицательный знак (эту последовательность называют шебанг) и путь /bin/bash, указывают системе что данный скрипт создан именно для оболочки bash. Во вторых, чтобы скрипт запустить как исполняемый файл, ему необходимо дать права на исполнение, иначе, попытка его запуска даст ошибку Permission denied.

Читайте также:  Unity для linux mint

Пример ошибки, когда запускается неисполняемый файл:

Права на исполнение даются командой chmod. Например,

chmod +x filename.sh

Данная команда дает всем пользователям операционной системы право на запуск файла с именем filename.sh

Право на запуск того же файла только владельцу можно дать следующей командой: chmod u+x filename.sh.

Расширение .sh не обязательно, но таким образом легче определять, какой файл является скриптом.

Ниже рассматривается пример написания простейшего скрипта, копирующего все файлы из папки /home/rustam/Documents в папку /tmp/backup.

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

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

Существуют два типа переменных, которые используются в bash-скриптах:

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

Можно использовать системную переменную $HOME в двойных кавычках, что не помешает ее распознаванию системой.

В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в скрипте свои собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария. Как и в случае с системными переменными, к пользовательским переменным обращаются используя знак доллара:

Дополним соответствующим образом скрипт, написанный ранее – добавляется переменная для хранения пути к папке, в которую осуществляется копирование.

2. Что такое планировщик заданий. Работа сервиса cron.

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

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

Как и большинство других сервисов Linux, cron запускается при старте системы и работает в фоновом режиме. Его основная задача – выполнять требуемые процессы в заданное время. Существует несколько конфигурационных файлов, из которых берется информация о том, что и когда нужно выполнять. Cron открывает файл /etc/crontab, в котором указываются необходимые данные.

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

Рекомендуется ее выполнять с опцией -e, тогда для редактирования правил используется текстовый редактор по умолчанию. После выполнения команды открывается временный файл, в котором записаны текущие правила cron и есть возможность добавлять новые. Добавленные правила запускаются именно от того пользователя, от имени которого они были добавлены.

Файлы 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”

Источник

Оцените статью