Скрипт, который автоматически находит и убивает процессы-зомби
🧟 «Зомби» едят память? Пора их остановить!
Зомби-процессы (со статусом
⚙️ Bash-скрипт для поиска и убийства
❔Как добавить в cron?
Часто ли вы сталкиваетесь с зомби-процессами?
🌐 @helcode | #bash
🧟 «Зомби» едят память? Пора их остановить!
Зомби-процессы (со статусом
Z) — это завершённые процессы, но ещё не закрытые родителем. ⚙️ Bash-скрипт для поиска и убийства
#!/bin/bash
# Ищем зомби-процессы
zombies=$(ps aux | awk '{if ($8=="Z") print $2}')
if [ -z "$zombies" ]; then
echo "Зомби не найдены. Все чисто!"
else
echo "Найдены зомби: $zombies"
kill -9 $zombies
fi
❔Как добавить в cron?
*/10 * * * * /path/to/kill_zombies.sh
Часто ли вы сталкиваетесь с зомби-процессами?
P.S. Если зомби возвращаются, возможно, проблема в родительском процессе. Ищите root cause!
🌐 @helcode | #bash
👍6
Темная сторона cron: 5 скрытых опасностей
Cron кажется простым, пока не сломает продакшн
1. Переменные окружения
Cron не знает ваш
2. Перенаправление вывода
Без
3. Блокировки (race conditions)
Если скрипт работает дольше интервала, запустятся две копии. Решение:
4. Разные шеллы
Cron использует
5. Неправильное время
Cron живёт в UTC, а не в вашем часовом поясе. Проверяйте:
Какие грабли с cronом вас больно били?
🌐 @helcode | #bash
Cron кажется простым, пока не сломает продакшн
1. Переменные окружения
Cron не знает ваш
$PATH! Всегда указывайте полные пути: 0 * * * * /usr/bin/python3 /scripts/backup.py
2. Перенаправление вывода
Без
> /dev/null 2>&1 cron будет слать письма на локальную почту. 3. Блокировки (race conditions)
Если скрипт работает дольше интервала, запустятся две копии. Решение:
flock -n /tmp/script.lock /scripts/script.sh
4. Разные шеллы
Cron использует
/bin/sh, а не ваш любимый bash. Тестируйте так: /bin/sh -c "/scripts/test.sh"
5. Неправильное время
Cron живёт в UTC, а не в вашем часовом поясе. Проверяйте:
TZ=Europe/Moscow date
Какие грабли с cronом вас больно били?
P.S. Если cron молчит, проверьте /var/log/syslog — там обычно есть ответ.
🌐 @helcode | #bash
👍3❤1
Автоматизация пентеста: сканирование уязвимостей в один клик
🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!
1. Быстрое сканирование открытых портов (Nmap)
2. Проверка уязвимостей (Nikto для веба)
3. Автоматический отчёт (сборка в HTML)
❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.
Какие инструменты для пентеста вы используете чаще всего?
🌐 @helcode | #bash
🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!
1. Быстрое сканирование открытых портов (Nmap)
nmap -sV -T4 192.168.1.0/24 -oN scan.txt
2. Проверка уязвимостей (Nikto для веба)
nikto -h http://example.com -output vuln.html
3. Автоматический отчёт (сборка в HTML)
nmap -sV --script=vulners -oX scan.xml 192.168.1.1
xsltproc scan.xml -o report.html
❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.
Какие инструменты для пентеста вы используете чаще всего?
P.S. Если Nmap ругается на права, попробуйте sudo или nmap -Pn.
🌐 @helcode | #bash
👍5
Скрипт, который автоматически пишет вам оправдания
Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)
Python-скрипт
Bash-версия
Какое ваше любимое "техническое" оправдание?
🌐 @helcode | #python #bash
Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)
Python-скрипт
import random
excuses = [
"Это баг в библиотеке, уже фиксят.",
"Коллега задеплоил без тестов.",
"DNS-кеш.",
"Виноват рефакторинг.",
"Это фича, а не баг.",
]
print(random.choice(excuses))
Bash-версия
#!/bin/bash
excuses=(
"Это баг в библиотеке, уже фиксят."
"Коллега задеплоил без тестов."
"DNS-кеш."
)
echo ${excuses[$RANDOM % ${#excuses[@]}]}
Какое ваше любимое "техническое" оправдание?
P.S. Если скрипт выдаёт одно и то же, проверьте $RANDOM. Или вините кеш.
🌐 @helcode | #python #bash
👍2
Сколько стоит ваш час? Экономика автоматизации
📖 Миф: «Написание скриптов не окупается».
👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.
⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!
Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.
🌐 @helcode
📖 Миф: «Написание скриптов не окупается».
👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.
⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!
Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.
🌐 @helcode
👍7💯1
Идеальный скрипт: 6 обязательных элементов
Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок —
3. Логирование —
4. Параметры —
5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».
Шаблон для Bash:
Какой элемент кажется вам самым сложным?
🌐 @helcode | #bash
Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок —
if ! command; then exit 1; fi. 3. Логирование —
logger -t "скрипт начался". 4. Параметры —
THRESHOLD_DAYS=${1:-7}. 5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».
Шаблон для Bash:
#!/bin/bash
# Автор: Вася Пупкин
# Версия: 1.1
# Назначение: Чистит логи старше N дней
LOG_DIR="/var/log"
DAYS=${1:-30} # Параметр по умолчанию
if ! find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete; then
echo "Ошибка удаления! Проверьте права." >&2
exit 1
fi
Какой элемент кажется вам самым сложным?
🌐 @helcode | #bash
👍4🔥2❤1
Скрипты или готовый софт - что выбрать?
🔧 Скрипты идеальны для:
- Нестандартных задач
- Быстрого реагирования
- Маленьких инфраструктур
⚙️ Готовый софт (Zabbix, Prometheus) для:
- Крупных систем
- Сложной аналитики
- Долгосрочного хранения данных
❗️Главное правило:
> Если скрипты закрывают ваши задачи — не усложняйте.
А вы используете скрипты или готовые системы? Делитесь в комментариях!
🌐 @helcode
🔧 Скрипты идеальны для:
- Нестандартных задач
- Быстрого реагирования
- Маленьких инфраструктур
⚙️ Готовый софт (Zabbix, Prometheus) для:
- Крупных систем
- Сложной аналитики
- Долгосрочного хранения данных
❗️Главное правило:
> Если скрипты закрывают ваши задачи — не усложняйте.
А вы используете скрипты или готовые системы? Делитесь в комментариях!
🌐 @helcode
👍3
Вредный совет: как обойти auditd?
🛡Для тестирования защиты
1. Остановка auditd:
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
- Защита: запрет
1. Перезапись логов:
- Защита: настройка
❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
🛡Для тестирования защиты
1. Остановка auditd:
sudo systemctl stop auditd
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
sudo auditctl -D
- Защита: запрет
auditctl для обычных пользователей. 1. Перезапись логов:
echo "" > /var/log/audit/audit.log
- Защита: настройка
immutable-флагов на файлы. ❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
👍1😁1
Как автоматизировать создание виртуальных машин?
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
Запуск:
Вариант 2: Hyper-V + PowerShell
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
🌐 @helcode | #bash #powershell
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Запуск:
vagrant up # Создаёт и запускает ВМ
vagrant ssh # Подключается к ней
Вариант 2: Hyper-V + PowerShell
# Создаём новую ВМ
New-VM -Name "MyServer" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\MyServer.vhdx" -NewVHDSizeBytes 50GB
Set-VMProcessor -VMName "MyServer" -Count 2
Start-VM -Name "MyServer"
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
P.S. Если Vagrant говорит «box not found», проверьте, установили ли вы бокс командой vagrant box add ubuntu/focal64
🌐 @helcode | #bash #powershell
👍1
Тренды автоматизации 2025
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
# Мониторит CPU и решает, добавлять ли ресурсы
if current_cpu > threshold:
scale_up(servers=1)
log("Выполнено масштабирование из-за нагрузки")
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
👌1
Как работать с API в PowerShell?
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
Отправка данных (POST)
💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.Если Invoke-RestMethod тормозит, попробуйте добавить -DisableKeepAlive
🌐 @helcode | #powershell
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
# Простой запрос
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.name
# С заголовками
$headers = @{
"Authorization" = "token YOUR_TOKEN"
}
$response = Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Headers $headers
Отправка данных (POST)
$body = @{
name = "NewRepo"
description = "Created via PowerShell"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Method Post -Body $body -Headers $headers -ContentType "application/json"💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.
🌐 @helcode | #powershell
👍1
Коллеги, всех приветствую!
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Хабр
Генерация тестовых данных на Python: руководство по библиотеке Faker
Привет, Хабр! Думаю, многие сталкивались с необходимостью генерации тысячи пользователей. Вручную - не вариант, слишком долго. В данной статье разберу библиотеку Faker. Это генератор реалистичных...
👍4
Самая частая ошибка в cron: «Команда не найдена»
Знакомая история? Скрипт отлично runs из терминала, но в
Всё потому, что
Решение простое и железное: ВСЕГДА использовать полные пути!
❌
✅
❌
✅
Найти полный путь к любой команде можно через
Вывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
Знакомая история? Скрипт отлично runs из терминала, но в
cron -е падает с ошибкой command not found.Всё потому, что
cron работает в минимальном окружении! У него своя, очень скудная переменная PATH (часто просто /usr/bin:/bin). Он не видит ваши $HOME/.bashrc и любимые ~/bin.Решение простое и железное: ВСЕГДА использовать полные пути!
❌
* * * * * myscript.sh✅
* * * * * /home/user/scripts/myscript.sh❌
* * * * * python3 script.py ✅
* * * * * /usr/bin/python3 /path/to/script.pyНайти полный путь к любой команде можно через
which или whereis: which python3 whereis nodeВывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
❤4👍2
Pester: как писать тесты для скриптов?
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
Запуск тестов
Реальный пример: тестирование функции
Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
🌐 @helcode | #powershell #windows #тест
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
# Создаём файл MyScript.Tests.ps1
Describe "Проверка функций моего модуля" {
It "Сложение 2+2 должно возвращать 4" {
(2 + 2) | Should -Be 4
}
It "Функция Get-Hello возвращает приветствие" {
Get-Hello -Name "Alice" | Should -Be "Hello, Alice"
}
}
Запуск тестов
Invoke-Pester -Path .\MyScript.Tests.ps1
Реальный пример: тестирование функции
# BeforeAll {
# . .\MyScript.ps1 # Подгружаем тестируемый скрипт
# }
Describe "Get-Hello" {
It "Должна возвращать правильное приветствие" {
Get-Hello -Name "World" | Should -Be "Hello, World"
}
}Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
P.S. Если тесты не запускаются, проверьте, установлен ли Pester: Install-Module -Name Pester -Force
🌐 @helcode | #powershell #windows #тест
Когда Nmap не справляется (практичные альтернативы)
Nmap тормозит на большой сети?
🛠 Есть решения быстрее и тише.
1️⃣ Masscan: самое быстрое сканирование интернета. Асинхронный движок.
- Для чего: когда нужно просканировать
- Команда:
2️⃣ RustScan: modern-альтернатива на Rust. Находит открытые порты, а затем передает их в Nmap для детального анализа.
- Для чего: сочетание скорости Masscan и мощи Nmap.
- Команда:
3️⃣ Naabu: еще один быстрый сканер портов на Go, часто используется в связке с другими инструментами пентеста.
- Для чего: для интеграции в автоматизированные пайплайны.
🏁 Итог: используйте Nmap для точечного и детального анализа. Для сканирования огромных диапазонов —
🌐 @helcode | #bash #masscan #rustscan #альтернативы #производительность
Nmap тормозит на большой сети?
🛠 Есть решения быстрее и тише.
1️⃣ Masscan: самое быстрое сканирование интернета. Асинхронный движок.
- Для чего: когда нужно просканировать
/16 или больше за минуты.- Команда:
masscan -p1-65535 10.0.0.0/16 --rate=1000002️⃣ RustScan: modern-альтернатива на Rust. Находит открытые порты, а затем передает их в Nmap для детального анализа.
- Для чего: сочетание скорости Masscan и мощи Nmap.
- Команда:
rustscan -a <target> -- -A -sC // Найдет порты RustScan, просканирует Nmap3️⃣ Naabu: еще один быстрый сканер портов на Go, часто используется в связке с другими инструментами пентеста.
- Для чего: для интеграции в автоматизированные пайплайны.
🏁 Итог: используйте Nmap для точечного и детального анализа. Для сканирования огромных диапазонов —
masscan или rustscan.🌐 @helcode | #bash #masscan #rustscan #альтернативы #производительность
👍3
Telegram-бот для алертов — просто и бесплатно
Telegram — идеальный канал для уведомлений:
1. Мгновенные push-уведомления
2. Бесплатно
3. Простая интеграция
🔧 Пример отправки алерта на Python:
Что можно мониторить?
✔️ Загрузка CPU/диска
✔️ Ошибки в логах
✔️ Изменения конфигов (
👉 Настроив бота, вы будете первым узнавать о проблемах!
🌐 @helcode | #telegram #bot
Telegram — идеальный канал для уведомлений:
1. Мгновенные push-уведомления
2. Бесплатно
3. Простая интеграция
🔧 Пример отправки алерта на Python:
python
requests.post(f"https://api.telegram.org/botTOKEN/sendMessage",
json={"chat_id": "ID", "text": "🚨 CPU > 90%!"})
Что можно мониторить?
✔️ Загрузка CPU/диска
✔️ Ошибки в логах
✔️ Изменения конфигов (
inotifywait) 👉 Настроив бота, вы будете первым узнавать о проблемах!
🌐 @helcode | #telegram #bot
👍2
Выбор инструмента для работы с API: requests, httpx или aiohttp?
Стандартный подход к работе с внешними API часто начинается с функции
👨🔬 Рассмотрим три популярные библиотеки для работы с HTTP-запросами в Python.
1.
Оптимальное решение для большинства синхронных задач.
➕ Преимущества: простота использования, интуитивный синтаксис.
➖ Ограничения: требуется самостоятельная реализация повторных попыток и кэширования.
2.
Поддерживает современные стандарты, включая HTTP/2 и асинхронные операции.
➕ Преимущества: совместимость с синхронным и асинхронным кодом, высокая производительность.
➖ Ограничения: для использования асинхронного режима требуется понимание принципов
3.
Предназначена для построения высокопроизводительных асинхронных приложений.
➕ Преимущества: максимальная производительность при работе с большим количеством одновременных запросов.
➖ Ограничения: требует глубокого понимания асинхронного программирования.
Критерии выбора:
* Стандартные синхронные задачи:
* Современные проекты с поддержкой HTTP/2:
* Высоконагруженные асинхронные приложения:
Какой подход к работе с API вы используете в своих проектах?
1.
2.
3.
4. Другое (укажите в комментариях)
Стандартный подход к работе с внешними API часто начинается с функции
requests.get(). Однако в продакшене возникают дополнительные требования: обработка ошибок, повторные попытки подключения, асинхронные вызовы и поддержка современных протоколов. Правильный выбор библиотеки позволяет повысить надежность и эффективность кода.👨🔬 Рассмотрим три популярные библиотеки для работы с HTTP-запросами в Python.
1.
requests (Стандарт для синхронных запросов)Оптимальное решение для большинства синхронных задач.
import requests
response = requests.get('https://api.example.com/data', timeout=5)
data = response.json()
➕ Преимущества: простота использования, интуитивный синтаксис.
➖ Ограничения: требуется самостоятельная реализация повторных попыток и кэширования.
2.
httpx (Современный синхронный и асинхронный клиент)Поддерживает современные стандарты, включая HTTP/2 и асинхронные операции.
import httpx
# Асинхронный режим
async with httpx.AsyncClient() as client:
response = await client.get('https://api.example.com/data')
data = response.json()
➕ Преимущества: совместимость с синхронным и асинхронным кодом, высокая производительность.
➖ Ограничения: для использования асинхронного режима требуется понимание принципов
async/await.3.
aiohttp (Специализированная библиотека для асинхронных задач)*Предназначена для построения высокопроизводительных асинхронных приложений.
import aiohttp
import asyncio
async def fetch_data():
async with aiohttp.ClientSession() as session:
async with session.get('https://api.example.com/data') as resp:
return await resp.json()
# Запуск асинхронной функции
data = asyncio.run(fetch_data())
➕ Преимущества: максимальная производительность при работе с большим количеством одновременных запросов.
➖ Ограничения: требует глубокого понимания асинхронного программирования.
Критерии выбора:
* Стандартные синхронные задачи:
requests* Современные проекты с поддержкой HTTP/2:
httpx* Высоконагруженные асинхронные приложения:
aiohttpКакой подход к работе с API вы используете в своих проектах?
1.
requests (синхронный подход)2.
httpx (современное решение)3.
aiohttp (асинхронная обработка)4. Другое (укажите в комментариях)
P.S. Сравнительный анализ библиотек помогает выбрать оптимальное решение для конкретных задач разработки, учитывая требования к производительности и масштабируемости.
🔥2❤1
Как мониторить логи в реальном времени?
⏳ Не ждите, пока пользователи пожалуются — ловите ошибки сразу!
Мониторинг Nginx/Apache:
Отслеживание системных ошибок (journalctl):
Инструмент inotifywait для отслеживания изменений файлов:
👉 Так вы узнаете о проблемах раньше пользователей.
🌐 @helcode | #bash #мониторинг #логи
⏳ Не ждите, пока пользователи пожалуются — ловите ошибки сразу!
Мониторинг Nginx/Apache:
tail -f /var/log/nginx/error.log | grep --line-buffered "error\|failed" | while read line; do
echo "Warning! $line" | send_to_telegram.sh
done
Отслеживание системных ошибок (journalctl):
journalctl -f -u your_service | grep -i "critical\|error"
Инструмент inotifywait для отслеживания изменений файлов:
inotifywait -m /etc/nginx -e modify | while read path action file; do
echo "Файл $file изменён! Проверьте конфиг!"
done
👉 Так вы узнаете о проблемах раньше пользователей.
🌐 @helcode | #bash #мониторинг #логи
🔥4
Как работать с JSON в PowerShell?
🔧 Парсим, создаём и преобразуем JSON без боли!
PowerShell легко конвертирует объекты в JSON и обратно.
👨🔬 Преобразование объекта в JSON
📖 Чтение JSON из файла
Работа с вложенными свойствами
💬 Обсуждение:
Какие самые интересные задачи с JSON вам приходилось решать в PowerShell?
🌐 @helcode | #powershell #json #автоматизация
🔧 Парсим, создаём и преобразуем JSON без боли!
PowerShell легко конвертирует объекты в JSON и обратно.
👨🔬 Преобразование объекта в JSON
$user = @{
name = "Alice"
age = 30
hobbies = @("coding", "gaming")
}
$user | ConvertTo-Json -Depth 3
# Результат:
# {
# "name": "Alice",
# "age": 30,
# "hobbies": ["coding", "gaming"]
# }📖 Чтение JSON из файла
$data = Get-Content -Path "config.json" -Raw | ConvertFrom-Json
$data.name
Работа с вложенными свойствами
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.login
$response.created_at
💬 Обсуждение:
Какие самые интересные задачи с JSON вам приходилось решать в PowerShell?
P.S. Если ConvertFrom-Json ругается на глубину, увеличьте параметр -Depth
🌐 @helcode | #powershell #json #автоматизация
👍1
try-except: спасательный круг или тихий убийца вашего кода?
⚙️ Конструкция
Рассмотрим частые ошибки и способы их избежать.
⚠️ Ошибка 1: слишком широкий обработчик исключений
Такой код перехватит все исключения, включая системные (например,
✅ Решение: явно указывайте типы исключений, которые вы ожидаете и можете обработать.
⚠️ Ошибка 2: "глухой" обработчик (silent failure)
Код проглатывает ошибку, и программа продолжает работать в невалидном состоянии.
✅ Решение: всегда как минимум логируйте исключение.
⚠️ Ошибка 3: непреднамеренная обработка исключений в цикле
Одно исключение внутри цикла может остановить всю обработку, если перехватывать его неправильно.
Ключ к эффективному использованию
🌐 @helcode | #python #автоматизация
⚙️ Конструкция
try-except — первый инструмент, который приходит на ум для обработки ошибок. Но ее неаккуратное использование может скрыть критические проблемы, привести к неожиданному поведению программы и затруднить отладку. Слишком широкий except — все равно что лечить все болезни обезболивающим: симптомы уйдут, а причина останется.Рассмотрим частые ошибки и способы их избежать.
⚠️ Ошибка 1: слишком широкий обработчик исключений
Такой код перехватит все исключения, включая системные (например,
KeyboardInterrupt).# ПЛОХО: Перехватывает вообще всё
try:
risky_operation()
except: # <- Ничего не указано!
print("Что-то пошло не так")
✅ Решение: явно указывайте типы исключений, которые вы ожидаете и можете обработать.
# ХОРОШО: Точечная обработка
try:
risky_operation()
except (ValueError, IndexError) as e: # <- Конкретные исключения
print(f"Обработали ожидаемую ошибку: {e}")
⚠️ Ошибка 2: "глухой" обработчик (silent failure)
Код проглатывает ошибку, и программа продолжает работать в невалидном состоянии.
# ОПАСНО: Ошибка просто исчезает
try:
save_to_database(data)
except:
pass # Ничего не происходит. Данные не сохранены, а мы и не знаем.
✅ Решение: всегда как минимум логируйте исключение.
# ЛУЧШЕ: Фиксируем проблему
import logging
try:
save_to_database(data)
except DatabaseError as e:
logging.error(f"Ошибка записи в БД: {e}") # Сообщение в лог
# Возможно, здесь стоит повторно бросить исключение или выполнить иное действие
⚠️ Ошибка 3: непреднамеренная обработка исключений в цикле
Одно исключение внутри цикла может остановить всю обработку, если перехватывать его неправильно.
# Осторожно: Одна ошибка прервет весь цикл
data = [1, 2, "three", 4, 5] # Строка вызовет TypeError при сложении
total = 0
for num in data:
try:
total += num
except TypeError:
# Обработали для элемента "three", цикл продолжается
print(f"Элемент {num} не является числом")
print(total) # 12
Ключ к эффективному использованию
try-except — предсказуемость. Обрабатывайте только те ошибки, которые вы можете корректно исправить или проинформировать о них систему логирования. Все остальные исключения лучше позволить всплыть наверх, где их обработает более общий обработчик или где разработчик увидит понятный traceback.P.S. Правильно настроенная обработка исключений — это не про то, чтобы скрыть проблемы, а про то, чтобы управлять ими предсказуемо и предоставлять четкую информацию для диагностики.
🌐 @helcode | #python #автоматизация
👍2