Windows: Запуск скриптов с правами администратора
Каждый Windows-админ сталкивался с ситуацией: нужен скрипт, который должен работать с правами администратора. Настроить службы, поправить реестр или перезапустить системный процесс без UAC-подтверждения? Можно автоматизировать.
▪️ Проблема
По умолчанию Python-скрипты запускаются от имени обычного пользователя. Это ограничивает работу с системными настройками и требует «ручного» запуска через правый клик.
▪️ Решение — библиотека pyuac
Пример кода:
▪️ Как это помогает
Скрипт сам проверяет уровень прав. Если они недостаточные — перезапускает себя с UAC-запросом. Минимум действий от пользователя, максимум автоматизации.
🧠 Для админа: такой приём пригодится для сервисных скриптов и утилит, которые должны работать «бесшовно».
#Windows #Python #SysAdmin #Automation
Каждый Windows-админ сталкивался с ситуацией: нужен скрипт, который должен работать с правами администратора. Настроить службы, поправить реестр или перезапустить системный процесс без UAC-подтверждения? Можно автоматизировать.
▪️ Проблема
По умолчанию Python-скрипты запускаются от имени обычного пользователя. Это ограничивает работу с системными настройками и требует «ручного» запуска через правый клик.
▪️ Решение — библиотека pyuac
Пример кода:
from pyuac import isUserAdmin, runAsAdmin
def main():
print("Я запущен как админ!")
if __name__ == "__main__":
if not isUserAdmin():
runAsAdmin()
else:
main()
▪️ Как это помогает
Скрипт сам проверяет уровень прав. Если они недостаточные — перезапускает себя с UAC-запросом. Минимум действий от пользователя, максимум автоматизации.
🧠 Для админа: такой приём пригодится для сервисных скриптов и утилит, которые должны работать «бесшовно».
#Windows #Python #SysAdmin #Automation
Linux: "Служба" своими руками. Пишем systemd unit-файл
Хватит запускать важные скрипты "руками" через nohup ./script.sh &. Путь инженера — превратить любой скрипт или приложение в управляемую службу. В современном Linux это делается через systemd unit-файлы.
Задача: Превратим простой Python веб-сервер в службу my-app.service.
1. Ваш скрипт (для примера /opt/my-app/app.py):
Python
2. Создаем unit-файл: sudo nano /etc/systemd/system/my-app.service
Ini, TOML
3. Запускаем и "включаем" службу:
Bash
Взгляд архитектора: Вы не просто "запустили скрипт". Вы декларативно описали его жизненный цикл. Теперь ОС сама следит за ним, перезапускает при сбоях (Restart=on-failure), запускает в нужном порядке (After=network.target) и от имени нужного пользователя. Это первый шаг к построению отказоустойчивых (self-healing) систем.
#linux #systemd #python #automation #devops #гайд #скрипты
Хватит запускать важные скрипты "руками" через nohup ./script.sh &. Путь инженера — превратить любой скрипт или приложение в управляемую службу. В современном Linux это делается через systemd unit-файлы.
Задача: Превратим простой Python веб-сервер в службу my-app.service.
1. Ваш скрипт (для примера /opt/my-app/app.py):
Python
#!/usr/bin/env python3
# Простой веб-сервер
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello from Admin Future!')
httpd = HTTPServer(('0.0.0.0', 8000), SimpleHandler)
httpd.serve_forever()
2. Создаем unit-файл: sudo nano /etc/systemd/system/my-app.service
Ini, TOML
[Unit]
Description=My Simple Python Web App
After=network.target
[Service]
Type=simple
# Запускаем от имени 'www-data' для безопасности
User=www-data
Group=www-data
# Указываем путь к нашему скрипту
ExecStart=/usr/bin/python3 /opt/my-app/app.py
# Автоматический перезапуск в случае сбоя
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
3. Запускаем и "включаем" службу:
Bash
# Перечитать конфиги, чтобы systemd увидел новый файл
sudo systemctl daemon-reload
# Запускаем службу
sudo systemctl start my-app
# Проверяем статус
sudo systemctl status my-app
# Включаем автозапуск при загрузке ОС
sudo systemctl enable my-app
Взгляд архитектора: Вы не просто "запустили скрипт". Вы декларативно описали его жизненный цикл. Теперь ОС сама следит за ним, перезапускает при сбоях (Restart=on-failure), запускает в нужном порядке (After=network.target) и от имени нужного пользователя. Это первый шаг к построению отказоустойчивых (self-healing) систем.
#linux #systemd #python #automation #devops #гайд #скрипты
👍4
AI-промпт: "Напиши и ОБЪЯСНИ мне этот RegEx"
Регулярные выражения (RegEx) — это язык, на котором 90% админов не говорят, а 10% — думают. Это чистая магия для парсинга логов, Nginx-конфигов или валидации данных. Но писать их — боль.
AI — идеальный переводчик с "человеческого" на "RegEx".
Плохой промпт: регулярка для IP-адреса Результат: \b(?:\d{1,3}\.){3}\d{1,3}\b (А почему? А 256.999.1.1 подойдет?)
Архитектурный промпт (для ChatGPT/Gemini/Copilot):
Взгляд архитектора: AI не просто дал вам "рыбу". Он научил вас. Вы получили не просто RegEx, а полную документацию к нему. Архитектор не использует "черные ящики", которые он скопировал со Stack Overflow. Он понимает, как работает каждый компонент его системы, даже если это RegEx, сгенерированный AI.
#ai4admin #regex #bash #python #automation #промпты #sre
Регулярные выражения (RegEx) — это язык, на котором 90% админов не говорят, а 10% — думают. Это чистая магия для парсинга логов, Nginx-конфигов или валидации данных. Но писать их — боль.
AI — идеальный переводчик с "человеческого" на "RegEx".
Плохой промпт: регулярка для IP-адреса Результат: \b(?:\d{1,3}\.){3}\d{1,3}\b (А почему? А 256.999.1.1 подойдет?)
Архитектурный промпт (для ChatGPT/Gemini/Copilot):
Выступи в роли эксперта по RegEx и инженера по парсингу логов.
Мне нужен RegEx-паттерн, который находит и извлекает (captures) IPv4-адреса.
Требования:
1. Паттерн должен валидировать каждый октет (от 0 до 255).
2. Он НЕ должен находить невалидные адреса (например, 999.999.999.999).
Формат ответа:
1. Паттерн: [Сам RegEx-паттерн]
2. Объяснение: Предоставь построчное объяснение, что делает каждая группа и каждый символ в паттерне (`\b`, `(?:`, `(25[0-5]|... )` и т.д.).
3. Пример для `grep`: Как использовать этот паттерн с `grep -E`.
4. Пример для `Python`: Как использовать этот паттерн в Python-скрипте.
Взгляд архитектора: AI не просто дал вам "рыбу". Он научил вас. Вы получили не просто RegEx, а полную документацию к нему. Архитектор не использует "черные ящики", которые он скопировал со Stack Overflow. Он понимает, как работает каждый компонент его системы, даже если это RegEx, сгенерированный AI.
#ai4admin #regex #bash #python #automation #промпты #sre
❤2
🤖 Python-скрипт: Проверяем сроки действия SSL-сертификатов
Забыть продлить SSL — классический факап, после которого "лежит" прод. Давайте автоматизируем проверку.
Этот скрипт проверяет список доменов и пишет в Telegram, если сертификат истекает меньше чем через 7 дней.
Код (ssl_checker.py):
Как запустить:
* Получите токен у @BotFather.
* Вставьте свои домены.
* Добавьте в Systemd Timer (как мы учили в прошлом посте 😉) или в Cron на ежедневный запуск.
Теперь вы узнаете о просроченном сертификате раньше, чем ваши пользователи.
#python #ssl #automation #scripting #ai4admin
Забыть продлить SSL — классический факап, после которого "лежит" прод. Давайте автоматизируем проверку.
Этот скрипт проверяет список доменов и пишет в Telegram, если сертификат истекает меньше чем через 7 дней.
Код (ssl_checker.py):
import ssl
import socket
import datetime
import requests
# Настройки
DOMAINS = ['google.com', 'yoursite.ru']
TG_TOKEN = 'ВАШ_ТОКЕН_БОТА'
CHAT_ID = 'ВАШ_CHAT_ID'
DAYS_ALERT = 7
def send_tg(message):
url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": CHAT_ID, "text": message})
def check_ssl(domain):
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain)
conn.connect((domain, 443))
cert = conn.getpeercert()
expire_date = datetime.datetime.strptime(cert['notAfter'], r"%b %d %H:%M:%S %Y %Z")
days_left = (expire_date - datetime.datetime.now()).days
if days_left < DAYS_ALERT:
return f"⚠️ {domain}: осталось {days_left} дн!"
return None
report = []
for d in DOMAINS:
try:
res = check_ssl(d)
if res: report.append(res)
except Exception as e:
report.append(f"❌ Ошибка {d}: {str(e)}")
if report:
send_tg("\n".join(report))
Как запустить:
* Получите токен у @BotFather.
* Вставьте свои домены.
* Добавьте в Systemd Timer (как мы учили в прошлом посте 😉) или в Cron на ежедневный запуск.
Теперь вы узнаете о просроченном сертификате раньше, чем ваши пользователи.
#python #ssl #automation #scripting #ai4admin
🥴2
🐍 Python: Мгновенный веб-сервер для передачи файлов
Ситуация: Нужно срочно скачать файл с вашего компьютера на телефон или другой ноутбук в той же Wi-Fi сети. Настраивать Samba/FTP/Nginx долго. Флешку искать лень.
Если у вас установлен Python (а он есть почти везде), у вас уже есть веб-сервер.
Запуск (в папке с файлами):
Теперь с любого устройства в сети заходите на http://IP-ВАШЕГО-ПК:8000. Вы увидите список файлов папки. Кликаем — качаем.
Чтобы остановить: `Ctrl+C` . Просто, гениально и работает везде (Linux, Windows, macOS).
#python #network #lifehack #webserver #cli #sharing
Ситуация: Нужно срочно скачать файл с вашего компьютера на телефон или другой ноутбук в той же Wi-Fi сети. Настраивать Samba/FTP/Nginx долго. Флешку искать лень.
Если у вас установлен Python (а он есть почти везде), у вас уже есть веб-сервер.
Запуск (в папке с файлами):
# Python 3
python3 -m http.server 8000
Теперь с любого устройства в сети заходите на http://IP-ВАШЕГО-ПК:8000. Вы увидите список файлов папки. Кликаем — качаем.
Чтобы остановить: `Ctrl+C` . Просто, гениально и работает везде (Linux, Windows, macOS).
#python #network #lifehack #webserver #cli #sharing
🔥5👍2❤1
🐍 Python 3.15 вышел: UTF-8 по умолчанию может сломать ваши скрипты на Windows
Коллеги, важный релиз для всех, кто пишет скрипты автоматизации, интеграции и парсеры системных логов на Python.
📌 ФАКТЫ
Стабильный релиз: 9 октября представлена финальная ветка Python 3.15.
UTF-8 Mode по умолчанию (PEP 686): встроенная функция
Ленивые импорты (PEP 810): синтаксис вида
Экспериментальный JIT: прирост производительности +7–8% на архитектуре x86_64 под Linux.
Сэмплирующий профилировщик Tachyon: низкоуровневый профилировщик без остановки рантайма. Умеет аттачиться к уже запущенному production-процессу и строить flame graph узких мест.
Новые базовые типы: добавлены нативные
⚠️ ГДЕ ВЫСТРЕЛИТ НА WINDOWS
Исторически на русскоязычных Windows-серверах и рабочих станциях
После обновления интерпретатора до 3.15:
Выгрузки отчетов, реестров и прайсов из 1С:Предприятия;
Экспортированные CSV-таблицы из классического Excel;
Текстовые журналы старых служб, конфиги и
при попытке прочитать их «по старинке» (
🛠 КАК ПРАВИЛЬНО ОБРАБАТЫВАТЬ КОДИРОВКИ
1. Явная фиксация кодировки в Python
Python
2. Временный откат поведения через переменные окружения
PowerShell
3. Экспресс-аудит репозитория скриптов перед обновлением Python
Bash
💡 В ЧЁМ СУТЬ
#skills #python #automation #windows #1c #linux #devops #sysadmin #admin_future
Коллеги, важный релиз для всех, кто пишет скрипты автоматизации, интеграции и парсеры системных логов на Python.
📌 ФАКТЫ
Стабильный релиз: 9 октября представлена финальная ветка Python 3.15.
UTF-8 Mode по умолчанию (PEP 686): встроенная функция
open() без явного параметра encoding теперь всегда открывает файлы в кодировке UTF-8, игнорируя региональные параметры операционной системы (locale.getencoding()).Ленивые импорты (PEP 810): синтаксис вида
lazy import json — модуль парсится и загружается в память только при первом фактическом вызове атрибута (включается строго явно флагом или директивой). Существенно срезает время холодного старта CLI-утилит.Экспериментальный JIT: прирост производительности +7–8% на архитектуре x86_64 под Linux.
Сэмплирующий профилировщик Tachyon: низкоуровневый профилировщик без остановки рантайма. Умеет аттачиться к уже запущенному production-процессу и строить flame graph узких мест.
Новые базовые типы: добавлены нативные
frozendict (неизменяемый словарь) и sentinel (удобные уникальные маркеры-заглушки вместо object()).⚠️ ГДЕ ВЫСТРЕЛИТ НА WINDOWS
Исторически на русскоязычных Windows-серверах и рабочих станциях
open() по умолчанию поднимал кодировку CP1251 (ANSI) для файлов и CP866 (OEM) для консольных утилит.После обновления интерпретатора до 3.15:
Выгрузки отчетов, реестров и прайсов из 1С:Предприятия;
Экспортированные CSV-таблицы из классического Excel;
Текстовые журналы старых служб, конфиги и
.bat/.cmd скрипты в кодировке ANSIпри попытке прочитать их «по старинке» (
open('file.txt')) мгновенно уронят процесс с ошибкой UnicodeDecodeError: 'utf-8' codec can't decode byte... либо тихо запишут кракозябры при сохранении.🛠 КАК ПРАВИЛЬНО ОБРАБАТЫВАТЬ КОДИРОВКИ
1. Явная фиксация кодировки в Python
Python
# Чтение локальных Windows-выгрузок (1С, Excel, старые сервисы)
with open('export_1c.csv', mode='r', encoding='cp1251') as f:
data = f.read()
# Корректный перехват stdout системных CLI-команд Windows (ipconfig, ping, netstat)
import subprocess
res = subprocess.run(
['ipconfig', '/all'],
capture_output=True,
encoding='cp866',
check=True
)
print(res.stdout)
2. Временный откат поведения через переменные окружения
PowerShell
# Принудительное отключение UTF-8 режима для конкретного сеанса PowerShell
$env:PYTHONUTF8 = '0'
python automation_script.py
3. Экспресс-аудит репозитория скриптов перед обновлением Python
Bash
# Ищем потенциально опасные вызовы open() без аргумента encoding в проекте
grep -rnE "open\([^)]*\)" --include="*.py" . | grep -v "encoding="
💡 В ЧЁМ СУТЬ
Явный параметр
encoding=в каждом вызове
open()— базовый стандарт инженерной гигиены, делающий скрипт полностью переносимым между Windows Server, Debian/Ubuntu и любыми версиями рантайма.
Перед тем как обновлять глобальный Python на серверах автоматизации или в контейнерах сборщиков, прогоните аудит кода регуляркой выше.
#skills #python #automation #windows #1c #linux #devops #sysadmin #admin_future