задачи по bash скриптам

Bash задачи, приближенные к боевым

задачи по bash скриптам. 40717:1793440489. задачи по bash скриптам фото. задачи по bash скриптам-40717:1793440489. картинка задачи по bash скриптам. картинка 40717:1793440489. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

задачи по bash скриптам. p. задачи по bash скриптам фото. задачи по bash скриптам-p. картинка задачи по bash скриптам. картинка p. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

задачи по bash скриптам. p. задачи по bash скриптам фото. задачи по bash скриптам-p. картинка задачи по bash скриптам. картинка p. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Это называется: «создал для себя сущность, теперь не знаю что с ней делать и как её поймать обратно. »

Видел, но задач не нашел, как писал выше в основном гайды. Возможно, чего-то не увидел, гляну внимательнее. Спасибо.

есть ли какие-нибудь ресурсы по bash-скриптингу?

Есть ли смысл искать небольшие разовые заказы на скрипты где-нибудь на фриланс биржах?

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

И, да, подпишись здесь на тег bash и помогай людям.

По близким мне задачам я написал скрипт для создания дифферентного билда проекта, чтобы делать апдейты и в дальнейшем их накатывать. Но bash автоматизации в java разработке мало, разве что разные continuous integration с использованием jenkins, да мелкие скрипты деплоя. Хочется для себя какие-нибудь более интересные скрипты поразрабатывать.

задачи по bash скриптам. 54286: 1816392560. задачи по bash скриптам фото. задачи по bash скриптам-54286: 1816392560. картинка задачи по bash скриптам. картинка 54286: 1816392560. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Традиционный таск. Напиши бекапилку с нормальным конфигом и поддержкой инкрементальных, дифференциальных бекапов.

задачи по bash скриптам. p. задачи по bash скриптам фото. задачи по bash скриптам-p. картинка задачи по bash скриптам. картинка p. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

попробуй сразу начни с обработчика возвратного кода ошибки из вложенного sub-шелла через trap или хотя-бы найти достойную альтернативу subshell-у

Источник

Titiaiev / bash-guide-1.md

Бесплатная книга-сайт на русском, полный гайд
Advanced Bash-Scripting Guide

BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

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

Что необходимо знать с самого начала

в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash ) поменяйте её на ваш путь.

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

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

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):

#!/bin/bash
#в переменную source засовываем первый параметр скрипта
source=$1
#в переменную dest засовываем второй параметр скрипта
dest=$2

Результат выполнения скрипта:

Структура if-then-else используется следующим образом:

для построения многоярусных условий вида:

для краткости и читаемости кода, можно использовать структуру:

Условия. Множественный выбор

Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.

esac #окончание оператора case.

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы 🙂 )

Прведу список логических операторв, которые используются для конструкции if-then-else-fi:

-z # строка пуста
-n # строка не пуста
=, (==) # строки равны
!= # строки неравны
-eq # равно
-ne # неравно
-lt,( # меньше
-le,( # меньше или равно
-gt,(>) #больше
-ge,(>=) #больше или равно
! #отрицание логического выражения
-a,(&&) #логическое «И»
-o,(||) # логическое «ИЛИ»

С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей(допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.

Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение поочередно в списке присваивается переменной.
Синтаксис следующий:

Рассмотрим небольшой пример:

Цикл while сложнее цикла for-in и используется для повторения команд, пока какое-то выражение истинно( код возврата = 0).
Синтаксис оператора следующий:

Пример работы цикла рассмотрим на следующем примере:

А теперь результат работы скрипта:

Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.

Рассмотрим еще один пример, я взял его из книги Advanced Bash Scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:

Результат выполнения скрипта:

Ну вот, как видите ничего сложного, список математических операций стандартный:

+ — сложение
— — вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
let позволяет использовать сокращения арифметических команд, тем самым сокращая кол-во используемых переменных. Например: a = a+b эквивалентно a +=b и т.д

Работа с внешними программами при написании shell-скриптов

Для начала немного полезной теории.

Если есть необходимость дописывать в файл(при использовании » > » он заменятеся), необходимо вместо » > » использовать » >> «

после просьбы sudo ввести пароль, он возьмется из файла my_password, как будто вы его ввели с клавиатуры.
Если необходимо записать в файл только ошибки, которые могли возникнуть при работе программы, то можно использовать:

символ » & » означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).

Конвеер — очень мощный инструмент для работы с консолью Bash. Синтаксис простой:
команда1 | команда 2 — означает, что вывод команды 1 передастся на ввод команде 2
Конвееры можно группировать в цепочки и выводить с помощью перенаправления в файл, например:

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

1. Передача вывода в переменную.

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

Результат работы: qwerty

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

Источник

Насколько хорошо ты знаешь bash?

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.
Пользуешься командным интерпретатором каждый день? Готов решить несколько логических задачек и узнать что-то новое? Добро пожаловать под кат.

Часть представленных здесь задач не принесёт реальной пользы, так как затрагивает какие-то сложные граничные случаи. Другая же часть будет полезна тем, кто постоянно использует шелл и читает чужие скрипты.

Примечание: на момент написания статьи автор использовал bash 4.4.12(1)-release в подсистеме Linux на Windows 10. Сложность задач различная.

Потоки ввода-вывода

Сколько строк будет в файле 1 после выполнения команды?

Что будет выведено на экран?

Что будет выведено на экран?

Есть заблуждение, что последовательность 1>&2 перенаправляет первый поток во второй, однако, это не так. Рассмотрим команду из задания. В начале интерпретации введённой команды таблица потоков выглядит так:

012
stdinstdoutstderr

bash обнаруживает последовательность 1>&2 и копирует содержимое ячейки 2 в ячейку 1:

012
stdinstderrstderr

После обнаружения последовательности 2>/dev/null интерпретатор записывает значение в ячейку 2, оставляя другие ячейки нетронутыми:

012
stdinstderr/dev/null

bash выводит так же и поток ошибок, так что на мы обнаруживаем на экране текст файла.

Задача 4
Как вывод stdout отправить на stderr, а вывод stderr, наоборот, на stdout?

Исполняемые файлы

Что выведет скрипт?

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

Таким образом, перед выполнением наша команда выглядит так:

И, как следствие, выполняется совершенно не то, что мы хотели.

Переменные

Что будет выведено на экран в первом и во втором случае?

В первом случае выполняется подстановка

Во втором случае будет заменён на именованный пайп, соединённый входом с stdout ls, и выходом с stdin cat.

После подстановки команда приобретёт вид:

Что будет выведено на экран?

При такой записи матчится паттерн (# — с начала переменной; ## — жадно с начала переменной; % — с конца переменной; %% — жадно с конца переменной) и удаляется при подстановке. Содержимое переменной при этом остаётся нетронутым. Таким образом, например, удобно получать имя файла без расширения.

Что будет выведено на экран?

Порядок выполнения

Что будет выведено на экран?

Что будет выведено на экран?

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

Источник

Bash-скрипты, часть 10: практические примеры

В предыдущих материалах мы обсуждали различные аспекты разработки bash-скриптов, говорили о полезных инструментах, но до сих пор рассматривали лишь небольшие фрагменты кода. Пришло время более масштабных проектов. А именно, здесь вы найдёте два примера. Первый — скрипт для отправки сообщений, второй пример — скрипт, выводящий сведения об использовании дискового пространства.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Главная ценность этих примеров для тех, кто изучает bash, заключается в методике разработки. Когда перед программистом встаёт задача по автоматизации чего бы то ни было, его путь редко бывает прямым и быстрым. Задачу надо разбить на части, найти средства решения каждой из подзадач, а потом собрать из частей готовое решение.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Отправка сообщений в терминал пользователя

Как видите, задача: «отправить сообщение», при ближайшем рассмотрении, оказалась задачей: «проверить возможность отправки сообщения, и, если нет препятствий, отправить его». Займёмся решением задачи, то есть — разработкой bash-скрипта.

▍Команды who и mesg

Ядром скрипта являются несколько команд, которые мы ещё не обсуждали. Всё остальное должно быть вам знакомо по предыдущим материалам.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Результаты вызова команды who

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

В данном случае команда вывела «is y», это значит, что пользователь, под которым мы работаем в системе, может принимать сообщения, отправленные в его терминал. В противном случае mesg выведет «is n».

При этом проверка возможна только для пользователей, которые вошли в систему. Если такая команда, после имени пользователя, выведет чёрточку (-), это означает, что пользователь запретил запись в свой терминал, то есть, сообщения ему отправлять нельзя. О том, что пользователю можно отправлять сообщения, говорит знак «плюс» (+).

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

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Включение приёма сообщений от других пользователей

После включения приёма сообщений mesg возвращает «is y».
Конечно, для обмена сообщениями нужны два пользователя, поэтому мы, после обычного входа в систему, подключились к компьютеру по ssh. Теперь можно поэкспериментировать.

▍Команда write

Обратите внимание на то, что с помощью write можно отправлять сообщения пользователям, вошедшим в виртуальную консоль. Пользователи, которые работают в графическом окружении (KDE, Gnome, Cinnamon, и так далее), не могут получать подобные сообщения.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Проверка возможности отправки сообщений и отправка сообщения

Вот что увидит в своём терминале пользователь, которому мы отправили сообщение.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Новое сообщение, пришедшее в терминал

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

▍Создание скрипта для отправки сообщений

Прежде чем заниматься отправкой сообщений, нужно определить, вошёл ли интересующий нас пользователь в систему. Сделать это можно с помощью такой команды:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Проверка статуса пользователя

▍Проверка возможности записи в терминал пользователя

Теперь надо проверить, принимает ли пользователь сообщения. Для этого понадобится такая конструкция, похожая на ту, которую мы использовали выше:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Проверка возможности отправки сообщений пользователю

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

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

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Проверка параметров командной строки, указанных при вызове скрипта

Тут, если при вызове скрипта ему не было передано сообщение для отправки, мы сообщаем об этом и завершаем работу. В противном случае — идём дальше.

▍Получение сведений о терминале пользователя

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

Теперь, после того, как все необходимые данные собраны, осталось лишь отправить сообщение:

Вызов готового скрипта выглядит так:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Успешная отправка сообщения с помощью bash-скрипта

Как видно, всё работает как надо. Однако, с помощью такого сценария можно отправлять лишь сообщения, состоящие из одного слова. Хорошо бы получить возможность отправлять более длинные сообщения.

▍Отправка длинных сообщений

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Попытка отправки длинного сообщения

Вот полный текст сценария:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Успешная отправка длинного сообщения:

Длинное сообщение успешно дошло до адресата. Теперь рассмотрим следующий пример.

Скрипт для мониторинга дискового пространства

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Отсортированный список объектов

В начале строки выводится её номер, потом идёт двоеточие и знак табуляции, далее — объём дискового пространства, следом — ещё один знак табуляции и имя папки.

Соберём вместе всё то, о чём мы говорили:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Вывод сведений о дисковом пространстве

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

Переберём список с помощью цикла for и вызовем вышеописанную последовательность команд для каждого элемента списка. Вот что получилось в результате:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Получение сведений о нескольких директориях

Итоги

На сегодня это всё. В следующий раз поговорим об автоматизации работы с интерактивными утилитами с помощью expect.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Уважаемые читатели! Есть ли у вас на примете несложные (а может быть и сложные, но понятные) bash-скрипты, разбор которых будет полезен новичкам?

Источник

Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

В прошлый раз мы говорили о работе с потоками ввода, вывода и ошибок в bash-скриптах, о дескрипторах файлов и о перенаправлении потоков. Сейчас вы знаете уже достаточно много для того, чтобы писать что-то своё. На данном этапе освоения bash у вас вполне могут возникнуть вопросы о том, как управлять работающими скриптами, как автоматизировать их запуск.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

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

Сигналы Linux

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

Код сигналаНазваниеОписание
1SIGHUPЗакрытие терминала
2SIGINTСигнал остановки процесса пользователем с терминала (CTRL + C)
3SIGQUITСигнал остановки процесса пользователем с терминала (CTRL + \) с дампом памяти
9SIGKILLБезусловное завершение процесса
15SIGTERMСигнал запроса завершения процесса
17SIGSTOPПринудительная приостановка выполнения процесса, но не завершение его работы
18SIGTSTPПриостановка процесса с терминала (CTRL + Z), но не завершение работы
19SIGCONTПродолжение выполнения ранее остановленного процесса

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

Bash-скрипты не контролируют эти сигналы, но они могут распознавать их и выполнять некие команды для подготовки скрипта к последствиям, вызываемым сигналами.

Отправка сигналов скриптам

Оболочка bash позволяет вам отправлять скриптам сигналы, пользуясь комбинациями клавиш на клавиатуре. Это оказывается очень кстати если нужно временно остановить выполняющийся скрипт или завершить его работу.

Завершение работы процесса

Комбинация клавиш CTRL + C генерирует сигнал SIGINT и отправляет его всем процессам, выполняющимся в оболочке, что приводит к завершению их работы.

Выполним в оболочке такую команду:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Завершение работы процесса с клавиатуры

Временная остановка процесса

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Число в квадратных скобках — это номер задания, который оболочка назначает процессу. Оболочка рассматривает процессы, выполняющиеся в ней, как задания с уникальными номерами. Первому процессу назначается номер 1, второму — 2, и так далее.

Если вы приостановите задание, привязанное к оболочке, и попытаетесь выйти из неё, bash выдаст предупреждение.

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

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Выглядит её вызов так:

Перехват сигналов

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

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

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Перехват сигнала выхода из скрипта

Перехватить сигнал выхода из скрипта можно, использовав при вызове команды trap имя сигнала EXIT :

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Перехват сигнала выхода из скрипта

Модификация перехваченных сигналов и отмена перехвата

Для модификации перехваченных скриптом сигналов можно выполнить команду trap с новыми параметрами:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Модификация перехвата сигналов

После модификации сигналы будут обрабатываться по-новому.

И нажмём CTRL + C на клавиатуре.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Сигнал, перехваченный до отмены перехвата

Выполнение сценариев командной строки в фоновом режиме

Иногда bash-скриптам требуется немало времени для выполнения некоей задачи. При этом вам может понадобиться возможность нормально работать в командной строке, не дожидаясь завершения скрипта. Реализовать это не так уж и сложно.

Запустим его, указав после имени символ амперсанда ( & ):

Это приведёт к тому, что он будет запущен как фоновый процесс.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Запуск скрипта в фоновом режиме

Скрипт будет запущен в фоновом процессе, в терминал выведется его идентификатор, а когда его выполнение завершится, вы увидите сообщение об этом.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

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

Что если нужно, чтобы скрипт продолжал работать и после закрытия терминала?

Выполнение скриптов, не завершающих работу при закрытии терминала

Применим эту методику при запуске нашего скрипта:

Вот что будет выведено в терминал.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Просмотр заданий

Команда jobs позволяет просматривать текущие задания, которые выполняются в оболочке. Напишем такой скрипт:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

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

Запустим тот же скрипт в фоновом режиме, при этом перенаправим вывод скрипта в файл так, чтобы он ничего не выводил на экране:

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Получение сведений о скриптах

Перезапуск приостановленных заданий

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Теперь скрипт выполняется в фоновом режиме.

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

Для перезапуска задания в обычном режиме воспользуйтесь командой fg :

Планирование запуска скриптов

Вызов команды at выглядит так:

Эта команда распознаёт множество форматов указания времени.

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Планирование заданий с использованием команды at

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

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

Список заданий, ожидающих выполнения

Удаление заданий, ожидающих выполнения

задачи по bash скриптам. image loader. задачи по bash скриптам фото. задачи по bash скриптам-image loader. картинка задачи по bash скриптам. картинка image loader. традиционно каждый админ (по крайней мере вебовый) в какой-то момент жизни пишет свой мониторинг, систему резервного копирования и хреновину, которая будет создавать юзеров/сайты/ящики и т.п.

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

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

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

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

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

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

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

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

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

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

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

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

Запуск скриптов при входе в систему и при запуске оболочки

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

Итоги

Сегодня мы разобрали вопросы, касающиеся управления жизненным циклом сценариев, поговорили о том, как запускать скрипты в фоне, как планировать их выполнение по расписанию. В следующий раз читайте о функциях в bash-скриптах и о разработке библиотек.

Уважаемые читатели! А вы пользуетесь средствами планирования запуска сценариев командной строки по расписанию? Если да — расскажите пожалуйста о них.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *