вторник, 23 ноября 2021 г.

Автоматизация рутины. Скачиваем файлы через bash

Вышла я на работу, так что пора стряхнуть пыль с рубрики «истории с работы» 👀

Стоит у меня задача — скачать и запустить N справочников на стенде, около 10 штук. Команда выглядит так:

env/bin/test download dir_1

env/bin/test download dir_2

env/bin/test download dir_3

...

env/bin/test start dir_1

env/bin/test start dir_2

Это в упрощенном виде. А если у меня есть какие-то особенности запуска (смещение порта, например), команда получается длиннее:

. tester.env && . custom.env && env/bin/test download dir_1

Команды можно вызвать пачкой, они не конфликтуют друг с другом. Ну и прекрасно! Можно, конечно, уныло вставлять команду в командую строку и ждать выполнения, но зачем?

Написала sh-скриптик (выполняю на линукс-машине команды). Можно или писать «. tester.env && . custom.env» в каждой команде, или указать их один раз в начале скрипта. Получилось примерно так:


#!/bin/bash

. tester.env

. custom.env

# Скачать справочники

env/bin/test download dir_1

env/bin/test download dir_2

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

env/bin/test start dir_1

env/bin/test start dir_2


Попробовала запустить — работает! Но выводит результаты в консоль, что очень неудобно. Листаешь потом консоль и пытаешься понять:

  • есть тут ошибки или нет
  • на каком ты этапе
Так что добавила немного логгирования в скрипт! Получилось вот так:


#!/bin/bash


. tester.env

. custom.env


# Скачать справочники

env/bin/test download dir_1 >> update_log.txt

env/bin/test download dir_2 >> update_log.txt


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

env/bin/test start dir_1 >> update_log.txt

env/bin/test start dir_2 >> update_log.txt



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

См также: 

Запустила — уже лучше. Теперь всё сохраняется в файлик и можно его изучать. Но по прежнему неудобно понимать "где я?", какая именно команда сейчас выполняется. Добавила в логи комментарии через echo:

#!/bin/bash


. tester.env

. custom.env


# Скачать справочники

echo "**************************************************"  >> update_log.txt

echo "($(date '+%Y-%m-%d')) Скачиваем справочники" >> update_log.txt

echo "**************************************************"  >> update_log.txt


echo "env/bin/test download dir_1"

env/bin/test download dir_1 >> update_log.txt


echo "----"  >> update_log.txt

echo "env/bin/test download dir_2"

env/bin/test download dir_2 >> update_log.txt


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

echo "**************************************************"  >> update_log.txt

echo "($(date '+%Y-%m-%d')) Запускаем справочники" >> update_log.txt

echo "**************************************************"  >> update_log.txt


echo "env/bin/test start dir_1"

env/bin/test start dir_1


echo "----"  >> update_log.txt

echo "env/bin/test start dir_2"

env/bin/test start dir_2


Да, сам скрипт стал выглядеть довольно страшненько, в первой версии прям идельно смотрелся, ряд коротких красивых команд. Зато так удобно запустить и уйти на обед / домой вечером. А потом в логе спокойно прочитать, как отработала та или иная команда 👀

И да, скрипт написан на коленке и мог бы быть намного красивее. Но это лучше, чем ничего. И   «Done is better then perfect» © =)

Комментариев нет:

Отправить комментарий