Как заставить скрипты общаться друг с другом: не только HTTP
Ваши скрипты живут в вакууме и не общаются? Пора познакомить их друг с другом! 🤝
Часто одна автоматизированная задача должна запускать другую или передавать ей данные. Делать это через запись в файл и постоянный опрос - неэлегантно. Есть более эффективные способы межпроцессного взаимодействия (IPC).
👀 Рассмотрим несколько способов, кроме очевидного HTTP.
Способ 1: очереди сообщений (Message Queues) на примере Redis
Способ 2: Named Pipes (именованные каналы) в Linux/macOS
* Очереди сообщений идеальны для построения распределенных систем. Гарантируют доставку, позволяют балансировать нагрузку между несколькими "воркерами".
* Именованные каналы - очень простой способ одноразовой передачи данных между процессами на одной машине. Работает на уровне файловой системы.
Как ваши скрипты общаются между собой?
🌐 @helcode | #python #bash
Ваши скрипты живут в вакууме и не общаются? Пора познакомить их друг с другом! 🤝
Часто одна автоматизированная задача должна запускать другую или передавать ей данные. Делать это через запись в файл и постоянный опрос - неэлегантно. Есть более эффективные способы межпроцессного взаимодействия (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 - это твой телепорт в мир удаленного управления. Вот шпаргалка, чтобы не забыть самые мощные заклинания.
🛠 Пример:
➤ Подключение с определенным ключом:
➤ Запуск команды без входа на сервер:
➤ Проброс порта (туннелирование):
➤ Проброс GUI-приложения:
➤ Упрощение через ~/.ssh/config:
Теперь просто:
Файл
Какой ваш самый частый или самый хитрый сценарий использования SSH? Делитесь лайфхаками!
🌐 @helcode | #bash
Сидеть перед физическим сервером - это прошлый век. 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-файл):
Пример (задание cron через Ansible):
Ansible модуль
А Вы как предпочитаете настраивать крон? Вручную, через Ansible, или может быть есть инструменты покруче?
🌐 @helcode | #bash #yaml
Вы написали шикарный скрипт для бэкапа. Он работает. Один раз. А нужно, чтобы он запускался каждую ночь. 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 - это не просто хранилище ключ-значение, это швейцарский нож для данных в памяти. Вот команды, которые должны быть в арсенале каждого автоматизатора.
Пример:
EX 3600 устанавливает время жизни ключа в 1 час. Автоматическое удаление устаревших данных - одна из крутейших фич Redis.
Какую самую необычную задачу вы решали с помощью Redis?
🌐 @helcode | #bash
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 - один из самых популярных брокеров сообщений. Вот основные команды для управления им из командной строки.
Пример:
Какие самые интересные паттерны с очередями Dы реализовывали? Work queues, pub/sub?
🌐 @helcode | #bash
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
👀5❤1
Поднимаем локальное окружение с WordPress + MySQL за 5 минут
Нужно быстро протестировать плагин или тему WordPress? Не нужно устанавливать веб-сервер, PHP и MySQL на свою машину. Docker Compose сделает все за Вас!
Пример (docker-compose.yml):
Как использовать:
Весь WordPress и MySQL запускаются в изолированных контейнерах. После остановки данные сохраняются в volume.
🌐 @helcode | #yaml #bash
Нужно быстро протестировать плагин или тему 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 CLI использует те же права доступа, что и веб-консоль. Настройте IAM-роли правильно!
Какие ваши любимые команды AWS CLI?
🌐 @helcode | #bash
Постоянно заходить в веб-консоль 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? Базы данных, Kubernetes?
🌐 @helcode | #bash
Terraform стал стандартом для IaC. Вот шпаргалка по основным командам, которые нужно знать каждому инженеру.
Код:
# Инициализация проекта
terraform init
# Просмотр плана изменений
terraform plan
# Применение изменений
terraform apply
# Уничтожение инфраструктуры
terraform destroy
# Просмотр состояния
terraform show
# Обновление состояния
terraform refresh
Всегда запускайте
terraform plan перед apply! Это покажет, что именно изменится, и спасет от неожиданностей.Какие самые сложные вещи вы описывали в Terraform? Базы данных, Kubernetes?
Команда terraform destroy - это как красная кнопка: нажимаешь, и вся тщательно построенная инфраструктура исчезает. Страшно, но иногда очень нужно.
🌐 @helcode | #bash
🤩2❤1🔥1
Мониторим изменения в файлах inotifywait
Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?
🛠 Варианты использования:
- Автоперезагрузка dev-сервера
- Синхронизация файлов при изменении
- Запуск тестов при изменении кода
🌐 @helcode | #bash
Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?
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
Нужно быстро проанализировать логи и получить статистику?
Преимущества:
➤ Работает с огромными файлами
➤ Гибкие условия фильтрации
➤ Можно считать суммы, средние, группировать
🌐 @helcode | #bash
Нужно быстро проанализировать логи и получить статистику?
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