Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Как заставить скрипты общаться друг с другом: не только HTTP

Ваши скрипты живут в вакууме и не общаются? Пора познакомить их друг с другом! 🤝

Часто одна автоматизированная задача должна запускать другую или передавать ей данные. Делать это через запись в файл и постоянный опрос - неэлегантно. Есть более эффективные способы межпроцессного взаимодействия (IPC).

👀 Рассмотрим несколько способов, кроме очевидного HTTP.

Способ 1: очереди сообщений (Message Queues) на примере Redis
# Скрипт-отправитель (producer.py)
import redis
import json

r = redis.Redis(host='localhost', port=6379, db=0)
task = {'user_id': 456, 'action': 'generate_report'}
r.lpush('task_queue', json.dumps(task)) # Кладем задачу в очередь


# Скрипт-получатель (consumer.py)
import redis
import json
import time

r = redis.Redis(host='localhost', port=6379, db=0)
while True:
# Блокирующее ожидание задачи из очереди (ждем 30 сек)
_, task_json = r.brpop('task_queue', timeout=30)
if task_json:
task = json.loads(task_json)
print(f"Обрабатываю задачу: {task}")
# ... обработка ...
time.sleep(1)


Способ 2: Named Pipes (именованные каналы) в Linux/macOS
# Создаем канал
mkfifo my_pipe

# Скрипт-читатель (зависнет, пока не появятся данные)
cat my_pipe

# Скрипт-писатель
echo "Hello from another script!" > my_pipe


* Очереди сообщений идеальны для построения распределенных систем. Гарантируют доставку, позволяют балансировать нагрузку между несколькими "воркерами".
* Именованные каналы - очень простой способ одноразовой передачи данных между процессами на одной машине. Работает на уровне файловой системы.

Как ваши скрипты общаются между собой?

Научить скрипты общаться - это как организовать работу отдела: можно кидать записки через стол (файлы), а можно настроить слаженный процесс с задачами и очередями. Второе - эффективнее.


🌐 @helcode | #python #bash
👍4
SSH: козыри для удаленной "магии"

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

🛠 Пример:
➤ Подключение с определенным ключом:
ssh -i ~/.ssh/my_key user@host
➤ Запуск команды без входа на сервер:
ssh user@host 'ls -la /tmp'
➤ Проброс порта (туннелирование):
ssh -L 8080:localhost:80 user@host
➤ Проброс GUI-приложения:
ssh -X user@host firefox
➤ Упрощение через ~/.ssh/config:
Host myserver
HostName 192.168.1.1
User myuser
IdentityFile ~/.ssh/my_key

Теперь просто: ssh myserver

Файл ~/.ssh/config - лучший друг. Он запоминает настройки для разных серверов, чтобы не вводить их каждый раз.

Какой ваш самый частый или самый хитрый сценарий использования SSH? Делитесь лайфхаками!

SSH без ~/.ssh/config - это как звонить другу, каждый раз набирая полный номер с кодом страны. С конфигом - это добавление его в избранное.


🌐 @helcode | #bash
👍11
Cron + Ansible: Дуэт мечты для ежедневной рутины

Вы написали шикарный скрипт для бэкапа. Он работает. Один раз. А нужно, чтобы он запускался каждую ночь. Cron - это кукушка, которая будет будить ваш скрипт по расписанию. А Ansible - это дирижер, который расставит таких кукушек на всех серверах.

Пример (простой cron-файл):
# Пример crontab -e
# Минута Час День_месяца Месяц День_недели Команда
0 2 * * * /path/to/backup.sh # Каждый день в 2:00
*/5 * * * * /path/to/check_status.sh # Каждые 5 минут


Пример (задание cron через Ansible):
- name: Add backup cron job
cron:
name: "Daily Backup"
minute: "0"
hour: "2"
job: "/path/to/backup.sh"
user: "deploy"


Ansible модуль cron - это идемпотентный способ управлять расписанием. Он сам проверит, существует ли такое задание, и добавит его только если нужно.

А Вы как предпочитаете настраивать крон? Вручную, через Ansible, или может быть есть инструменты покруче?

Cron - это самый старый и надежный будильник в мире IT. Он разбудит ваш скрипт даже в выходной.


🌐 @helcode | #bash #yaml
👍4🤔2
Redis: 5 команд, которые сделают вас мастером кеширования

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

Пример:
# Положить значение
SET user:123 "John Doe" EX 3600 # EX - время жизни в секундах

# Получить значение
GET user:123

# Проверить существование ключа
EXISTS user:123

# Установить несколько значений за раз
MSET user:123 "John" user:456 "Jane"

# Увеличить счетчик
INCR page_views


EX 3600 устанавливает время жизни ключа в 1 час. Автоматическое удаление устаревших данных - одна из крутейших фич Redis.

Какую самую необычную задачу вы решали с помощью Redis?

Redis - это диктофон для ваших данных: записал, прослушал, а через час оно само стирается. Удобно!


🌐 @helcode | #bash
👍1
RabbitMQ: управляем очередями как профессионалы

RabbitMQ - один из самых популярных брокеров сообщений. Вот основные команды для управления им из командной строки.

Пример:
# Создать очередь
rabbitmqadmin declare queue name=video_processing durable=true

# Отправить сообщение
rabbitmqadmin publish exchange=amq.default routing_key=video_processing payload="hello"

# Посмотреть статистику
rabbitmqctl list_queues name messages_ready messages_unacknowledged

# Создать пользователя
rabbitmqctl add_user myuser mypassword

# Настроить права
rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"


durable=true делает очередь устойчивой - сообщения не потеряются при перезагрузке RabbitMQ.

Какие самые интересные паттерны с очередями Dы реализовывали? Work queues, pub/sub?

Команда rabbitmqctl - это как пульт управления для Dаших очередей: можно посмотреть, кто в очереди стоит и сколько народу ждет своей очереди.


🌐 @helcode | #bash
👀51
Поднимаем локальное окружение с WordPress + MySQL за 5 минут

Нужно быстро протестировать плагин или тему WordPress? Не нужно устанавливать веб-сервер, PHP и MySQL на свою машину. Docker Compose сделает все за Вас!

Пример (docker-compose.yml):
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql

wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
depends_on:
- db

volumes:
db_data:


Как использовать:
docker-compose up -d
# Открываем http://localhost:8080


Весь WordPress и MySQL запускаются в изолированных контейнерах. После остановки данные сохраняются в volume.

Локальное окружение на Docker - это как играть в симулятор жизни: можно экспериментировать, не боясь сломать что-то важное.


🌐 @helcode | #yaml #bash
👍1
AWS CLI: управляем облаком из терминала

Постоянно заходить в веб-консоль AWS неудобно. AWS CLI позволяет управлять всеми сервисами прямо из терминала. Вот самые полезные команды.

Пример:
# Настроить профиль
aws configure

# Посмотреть EC2 инстансы
aws ec2 describe-instances

# Создать S3 бакет
aws s3 mb s3://my-unique-bucket-name

# Загрузить файл в S3
aws s3 cp file.txt s3://my-bucket/

# Создать Lambda функцию
aws lambda create-function --function-name my-function \
--runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler --zip-file fileb://function.zip


AWS CLI использует те же права доступа, что и веб-консоль. Настройте IAM-роли правильно!

Какие ваши любимые команды AWS CLI?

AWS CLI - это как пульт от всего облака: не нужно вставать с кресла, чтобы управлять целым ЦОДом.


🌐 @helcode | #bash
🔥3
Terraform: основные команды для управления инфраструктурой

Terraform стал стандартом для IaC. Вот шпаргалка по основным командам, которые нужно знать каждому инженеру.

Код:
# Инициализация проекта
terraform init

# Просмотр плана изменений
terraform plan

# Применение изменений
terraform apply

# Уничтожение инфраструктуры
terraform destroy

# Просмотр состояния
terraform show

# Обновление состояния
terraform refresh


Всегда запускайте terraform plan перед apply! Это покажет, что именно изменится, и спасет от неожиданностей.

Какие самые сложные вещи вы описывали в Terraform? Базы данных, Kubernetes?

Команда terraform destroy - это как красная кнопка: нажимаешь, и вся тщательно построенная инфраструктура исчезает. Страшно, но иногда очень нужно.


🌐 @helcode | #bash
🤩21🔥1
Мониторим изменения в файлах inotifywait

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

inotifywait - утилита для отслеживания событий файловой системы

# Установка
sudo apt install inotify-tools

# Мониторим изменения в JS файлах
inotifywait -m -e modify,create,delete --format "%w%f" ./src/*.js |
while read file; do
echo "Файл $file изменен, перезагружаем сервер..."
pkill -f "node server.js"
node server.js &
done


🛠 Варианты использования:
- Автоперезагрузка dev-сервера
- Синхронизация файлов при изменении
- Запуск тестов при изменении кода

🌐 @helcode | #bash
👍2
Анализируем логи с awk

Нужно быстро проанализировать логи и получить статистику?

awk для сложной обработки текста

# Топ IP-адресов в access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# Статистика HTTP-статусов
awk '{print $9}' access.log | sort | uniq -c | sort -nr

# Средний размер ответа по URL
awk '{sum[$7] += $10; count[$7]++} END {for (url in sum) print url, sum[url]/count[url]}' access.log


Преимущества:
➤ Работает с огромными файлами
➤ Гибкие условия фильтрации
➤ Можно считать суммы, средние, группировать

🌐 @helcode | #bash
👍4
Работаем с CSV в командной строке

Нужно быстро обработать CSV файл без открытия Excel?

Комбинация утилит для работы с CSV

# Установка csvkit для удобной работы
pip install csvkit

# Просмотр структуры
csvstat data.csv

# Фильтрация строк
csvgrep -c "status" -m "active" data.csv

# Выбор колонок
csvcut -c "name,email,phone" data.csv

# Сортировка
csvsort -c "date" -r data.csv

# А если нет csvkit - используем awk:
awk -F',' '$3 > 1000 {print $1 "," $3}' data.csv


Идеально для быстрого анализа данных, подготовки данных для скриптов

🌐 @helcode | #bash
👍3