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

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

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

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

 Скрипты в ОС Linux

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

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

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

[rustam@dushanbe ~]$ ./filename.sh

-bash: ./filename.sh: Permission denied

Права на исполнение даются командой например, chmod +x filename.sh или право на запуск только владельцу файла chmod 700 filename.sh. Расширение .sh не обязательно, но таким образом нам легче определить, какой файл является скриптом.

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

#!/bin/bash

# Скрипт копирует файлы в папку /tmp/backup/
echo “Сейчас начнется копирование…”

cp /home/rustam/Documents/* /tmp/backup/

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

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

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

  • Переменные среды

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

echo "Home for the current user is: $HOME"

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

  • Пользовательские переменные

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

#!/bin/bash

age=34

name="Rustam"

echo "$name is $age years old"

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

#!/bin/bash

# Скрипт копирует файлы в папку /tmp/backup/
# В переменной dest_dir будет храниться путь к папке, который подставится в команду ниже

dest_dir="/tmp/backup/"
echo “Сейчас начнется копирование…”

cp /home/rustam/Documents/* $dest_dr

Что такое планировщик заданий

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

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

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

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

crontab -e

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

Файлы crontab, используемые для управления всей системой, располагаются в каталоге /etc/cron.d/. Кроме того, в каталогах /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).

Вывести содержимое текущего файла расписания:

crontab -l

Таблица crontab состоит из 6 колонок, которые разделяются пробелами или табуляторами. Первые пять колонок отвечают за время выполнения (соответственно, минута, час, день месяца, месяц, день недели), в них может находиться число, список чисел (1,2,3), диапазон чисел (1-3), символы * или /. Все остальные символы в строке интерпретируются как выполняемая команда с её параметрами – можно указать как саму команду (например, echo “Доброе утро”, так и путь к исполняемому скрипту).

Как запускать скрипты в кроне

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

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

Рассмотрим пример запуска скрипта filename.sh, который был создан нами ранее. Допустим, мы хотим, чтобы наш скрипт копировал файлы каждый день в 23:00

0 23 * * * /home/rustam/filename.sh

Примеры

Рассмотрим другие примеры работы с cron.

0 17 * * 1-5 echo “Рабочий день закончен”

15 6 * * sun echo “Выполняется в 6:15 в воскресенье”

30 12,13 * * 1,3 echo “Эта надпись выводится в понедельник и среду в 12:30 и 13:30”

0-59 * * * * echo “Выполняется ежеминутно”

Leave a Reply

Your email address will not be published. Required fields are marked *