Python скрипты для системного администратора автоматизация задач

Начните с автоматизации рутинных задач, таких как сбор информации о системе. Используйте скрипт на Python, который собирает данные о процессоре, оперативной памяти и дисковом пространстве. Для этого подойдут библиотеки psutil и platform. Например, с помощью нескольких строк кода вы можете получить информацию о загрузке процессора или свободном месте на диске. Это поможет быстро диагностировать проблемы без ручного ввода команд.

Упростите управление пользователями и правами доступа. Скрипт на Python может автоматически создавать учетные записи, назначать группы и настраивать права. Используйте модуль os для работы с файловой системой и subprocess для выполнения команд в терминале. Например, можно создать скрипт, который добавляет нового пользователя и сразу назначает ему доступ к определенным директориям.

Для резервного копирования данных напишите скрипт, который автоматически создает архивы важных файлов и переносит их на удаленный сервер. Используйте библиотеку shutil для работы с файлами и paramiko для передачи данных по SSH. Например, можно настроить ежедневное резервное копирование логов или конфигурационных файлов, чтобы минимизировать риск потери данных.

Автоматизируйте анализ логов с помощью скрипта, который ищет ошибки или подозрительные активности. Используйте модуль re для работы с регулярными выражениями и datetime для фильтрации по времени. Например, можно написать скрипт, который анализирует логи веб-сервера и отправляет уведомление, если обнаружено большое количество ошибок 500.

Управление системными процессами с помощью Python

Для мониторинга и управления системными процессами используйте модуль psutil. Он предоставляет простой доступ к информации о запущенных процессах, потреблении ресурсов и многом другом. Установите его через pip:

pip install psutil

Чтобы получить список всех процессов, выполните:

import psutil
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
print(proc.info)

Для завершения процесса по его идентификатору (PID) используйте метод terminate():

process = psutil.Process(pid)
process.terminate()

Если нужно завершить процесс по имени, выполните поиск и завершение:

for proc in psutil.process_iter():
if proc.name() == 'process_name.exe':
proc.terminate()

Для анализа загрузки CPU и памяти в реальном времени, воспользуйтесь следующими командами:

  • psutil.cpu_percent(interval=1) – загрузка CPU за последнюю секунду.
  • psutil.virtual_memory().percent – процент используемой оперативной памяти.

Если требуется автоматизировать запуск и остановку служб, используйте модуль subprocess. Например, для перезапуска службы в Windows:

import subprocess
subprocess.run(['net', 'stop', 'ServiceName'], check=True)
subprocess.run(['net', 'start', 'ServiceName'], check=True)

Для Linux аналогичные действия можно выполнить через systemctl:

subprocess.run(['sudo', 'systemctl', 'restart', 'service_name'], check=True)

Эти инструменты помогут вам быстро управлять процессами и оптимизировать работу системы.

Создание скрипта для мониторинга процессов

Для мониторинга процессов на сервере используйте модуль psutil. Установите его командой pip install psutil, чтобы получить доступ к информации о запущенных процессах.

Создайте скрипт, который будет проверять состояние процессов. Например, можно отслеживать потребление памяти и CPU. Используйте функцию psutil.process_iter() для перебора всех процессов. Для каждого процесса выведите его имя, идентификатор (PID) и процент использования CPU:


import psutil
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
print(f"PID: {proc.info['pid']}, Name: {proc.info['name']}, CPU: {proc.info['cpu_percent']}%")

Чтобы автоматизировать мониторинг, добавьте логирование. Используйте модуль logging для записи данных в файл. Например, можно настроить логирование каждые 5 минут:


import psutil
import logging
import time
logging.basicConfig(filename='process_monitor.log', level=logging.INFO, format='%(asctime)s %(message)s')
while True:
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):
log_message = f"PID: {proc.info['pid']}, Name: {proc.info['name']}, CPU: {proc.info['cpu_percent']}%, Memory: {proc.info['memory_info'].rss / 1024 / 1024:.2f} MB"
logging.info(log_message)
time.sleep(300)

Если нужно отслеживать конкретный процесс, добавьте проверку по имени. Например, для мониторинга процесса nginx:


for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == 'nginx':
print(f"Nginx is running with PID: {proc.info['pid']}")

Для уведомлений о критических состояниях используйте модуль smtplib для отправки email. Например, если процесс превышает порог использования CPU, отправьте предупреждение:


import smtplib
from email.mime.text import MIMEText
def send_alert(message):
msg = MIMEText(message)
msg['Subject'] = 'Process Alert'
msg['From'] = 'admin@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com') as server:
server.send_message(msg)
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
if proc.info['cpu_percent'] > 90:
alert_message = f"Process {proc.info['name']} (PID: {proc.info['pid']}) is using {proc.info['cpu_percent']}% CPU"
send_alert(alert_message)

Такой скрипт поможет своевременно выявлять проблемы и поддерживать стабильную работу системы.

Автоматизация завершения зависших процессов

Создайте скрипт на Python, который будет отслеживать и завершать зависшие процессы на вашем сервере. Используйте библиотеку psutil для получения информации о запущенных процессах и их потреблении ресурсов. Например, можно завершать процессы, которые используют более 90% CPU в течение определенного времени.

Пример кода:

import psutil
import time
def kill_hung_processes(cpu_threshold=90, duration=60):
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
try:
if proc.info['cpu_percent'] > cpu_threshold:
print(f"Процесс {proc.info['name']} (PID: {proc.info['pid']}) использует {proc.info['cpu_percent']}% CPU.")
time.sleep(duration)
if proc.info['cpu_percent'] > cpu_threshold:
proc.kill()
print(f"Процесс {proc.info['name']} (PID: {proc.info['pid']}) завершен.")
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
if __name__ == "__main__":
kill_hung_processes()

Этот скрипт можно настроить для работы в фоновом режиме с помощью планировщика задач, например, cron на Linux или Task Scheduler на Windows. Убедитесь, что скрипт запускается с достаточными правами для завершения процессов.

Для более гибкого управления можно добавить параметры командной строки, чтобы изменять пороговые значения CPU и длительность проверки. Это позволит адаптировать скрипт под разные условия работы сервера.

Если вам нужно отслеживать несколько серверов, рассмотрите возможность использования этого скрипта в сочетании с инструментами удаленного выполнения команд, такими как paramiko для SSH. Это упростит управление процессами на нескольких машинах одновременно.

Параметр Описание
cpu_threshold Пороговое значение использования CPU в процентах.
duration Время в секундах, в течение которого процесс должен превышать порог.

Регулярно проверяйте логи работы скрипта, чтобы убедиться, что он корректно завершает только зависшие процессы и не влияет на стабильность системы.

Сбор и анализ статистики использования ресурсов

Для мониторинга загрузки CPU, памяти и дисков используйте библиотеку psutil. Она предоставляет простой доступ к данным о текущем состоянии системы. Например, чтобы получить процент использования CPU, выполните psutil.cpu_percent(interval=1). Для получения информации о памяти вызовите psutil.virtual_memory(), а для данных о дисках – psutil.disk_usage('/').

Собранные данные можно сохранять в лог-файл для дальнейшего анализа. Создайте скрипт, который каждые 5 минут записывает показатели в CSV-файл. Используйте модуль csv для удобного форматирования данных. Это позволит отслеживать изменения в динамике и выявлять аномалии.

Для визуализации статистики подключите библиотеку matplotlib. Постройте графики загрузки CPU или использования памяти за определенный период. Это поможет быстро оценить нагрузку на систему и принять решение о необходимости оптимизации.

Если требуется мониторинг сетевой активности, используйте psutil.net_io_counters(). Этот метод покажет количество отправленных и полученных байт, что полезно для анализа трафика и выявления подозрительной активности.

Для автоматизации сбора данных на нескольких серверах создайте скрипт, который собирает статистику через SSH. Используйте библиотеку paramiko для подключения к удаленным машинам и выполнения команд. Это сэкономит время и упростит управление инфраструктурой.

Регулярно анализируйте собранные данные, чтобы выявлять узкие места и планировать апгрейд оборудования. Например, если загрузка CPU постоянно превышает 80%, стоит рассмотреть возможность увеличения мощности серверов.

Автоматизация резервного копирования и восстановления данных

Для автоматизации резервного копирования начните с использования библиотеки shutil и модуля os. Эти инструменты позволяют копировать файлы и директории с минимальными усилиями. Например, скрипт может ежедневно создавать резервные копии важных данных, сохраняя их в указанную папку с отметкой времени.

  • Используйте shutil.copytree() для копирования целых директорий.
  • Добавьте логирование с помощью модуля logging, чтобы отслеживать успешные операции и ошибки.
  • Настройте расписание через cron (Linux) или планировщик задач (Windows) для запуска скрипта в нужное время.

Для восстановления данных создайте скрипт, который проверяет наличие последней резервной копии и восстанавливает её в указанное место. Используйте shutil.rmtree() для очистки целевой директории перед восстановлением, чтобы избежать конфликтов.

  1. Проверьте целостность данных с помощью хеширования (например, hashlib.md5()).
  2. Добавьте опцию выбора точки восстановления, если резервные копии хранятся с разными метками времени.
  3. Протестируйте скрипт на тестовых данных, чтобы убедиться в его корректности.

Для работы с базами данных используйте библиотеку subprocess, чтобы вызывать утилиты вроде pg_dump (PostgreSQL) или mysqldump (MySQL). Сохраняйте дампы в сжатом формате с помощью gzip или zipfile для экономии места.

  • Настройте периодическое удаление старых резервных копий, чтобы не перегружать хранилище.
  • Используйте облачные хранилища (например, boto3 для AWS S3) для хранения резервных копий вне локальной сети.
  • Добавьте уведомления через email или Telegram (с помощью smtplib или requests), чтобы оперативно реагировать на сбои.

Регулярно обновляйте скрипты, добавляя новые функции и улучшая обработку ошибок. Это позволит поддерживать стабильность процесса резервного копирования и восстановления.

Разработка скрипта для создания резервных копий

Для автоматизации резервного копирования используйте модуль shutil и os. Создайте скрипт, который копирует указанные файлы или папки в заданную директорию с добавлением временной метки. Например, для копирования папки /var/logs в /backups добавьте следующий код:


import shutil
import os
from datetime import datetime
source = '/var/logs'
backup_dir = '/backups'
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
backup_path = os.path.join(backup_dir, f'backup_{timestamp}')
shutil.copytree(source, backup_path)
print(f'Резервная копия создана: {backup_path}')

Для работы с большими объемами данных добавьте сжатие архива с помощью модуля tarfile. Это уменьшит занимаемое место и ускорит передачу данных. Пример сжатия папки в архив:


import tarfile
with tarfile.open(f'{backup_path}.tar.gz', 'w:gz') as tar:
tar.add(backup_path, arcname=os.path.basename(backup_path))
shutil.rmtree(backup_path)
print(f'Архив создан: {backup_path}.tar.gz')

Для регулярного выполнения скрипта настройте планировщик задач. В Linux используйте cron, добавив задачу в crontab:


0 2 * * * /usr/bin/python3 /path/to/backup_script.py

Добавьте проверку успешности выполнения резервного копирования. Например, проверьте существование архива и его размер. Если что-то пошло не так, отправьте уведомление по электронной почте с помощью модуля smtplib.


import smtplib
from email.mime.text import MIMEText
if not os.path.exists(f'{backup_path}.tar.gz'):
msg = MIMEText('Ошибка при создании резервной копии')
msg['Subject'] = 'Ошибка резервного копирования'
msg['From'] = 'backup@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com') as server:
server.sendmail('backup@example.com', ['admin@example.com'], msg.as_string())

Оптимизируйте скрипт, добавив возможность выбора файлов по маске или исключения ненужных данных. Используйте модуль fnmatch для фильтрации:


import fnmatch
for root, dirs, files in os.walk(source):
for file in fnmatch.filter(files, '*.log'):
shutil.copy2(os.path.join(root, file), backup_path)

Тестируйте скрипт на тестовых данных перед запуском в production. Это поможет избежать потери данных и убедиться в корректности работы.

Восстановление из резервной копии с использованием Python

Для восстановления данных из резервной копии с помощью Python, используйте модуль shutil. Он позволяет копировать файлы и директории с минимальными усилиями. Например, чтобы восстановить папку из резервной копии, выполните следующие действия:

  1. Импортируйте модуль shutil: import shutil.
  2. Укажите путь к резервной копии и целевой директории: backup_path = '/backup/data', restore_path = '/restore/data'.
  3. Используйте функцию copytree для копирования: shutil.copytree(backup_path, restore_path).

Если требуется восстановить отдельные файлы, воспользуйтесь функцией copy2. Она сохраняет метаданные файла, такие как время последнего изменения:

  • Укажите путь к файлу в резервной копии и целевой путь: backup_file = '/backup/file.txt', restore_file = '/restore/file.txt'.
  • Выполните копирование: shutil.copy2(backup_file, restore_file).

Для работы с архивами, такими как ZIP или TAR, используйте модули zipfile или tarfile. Например, чтобы извлечь содержимое ZIP-архива:

  1. Импортируйте модуль zipfile: import zipfile.
  2. Откройте архив: with zipfile.ZipFile('/backup/data.zip', 'r') as zip_ref:.
  3. Извлеките файлы в целевую директорию: zip_ref.extractall('/restore/data').

Для автоматизации процесса восстановления, создайте скрипт, который проверяет наличие резервной копии и восстанавливает данные по расписанию. Используйте модуль os для проверки существования файлов и директорий:

  • Проверьте, существует ли резервная копия: if os.path.exists(backup_path):.
  • Запустите восстановление, если копия найдена: shutil.copytree(backup_path, restore_path).

Для повышения надежности, добавьте логирование с помощью модуля logging. Это поможет отслеживать успешные и неудачные попытки восстановления:

  • Настройте логгер: logging.basicConfig(filename='restore.log', level=logging.INFO).
  • Добавьте запись в лог перед началом восстановления: logging.info('Начало восстановления из резервной копии').
  • Зафиксируйте завершение процесса: logging.info('Восстановление завершено успешно').

Эти подходы помогут вам быстро и эффективно восстанавливать данные из резервных копий, минимизируя простои и ошибки.

Оптимизация процесса резервного копирования для различных источников

Используйте библиотеку shutil для копирования файлов и директорий. Она позволяет быстро создавать резервные копии с минимальным количеством кода. Например, для копирования всей директории достаточно одной строки:

shutil.copytree('source_directory', 'backup_directory')

Для работы с базами данных, таких как MySQL или PostgreSQL, применяйте модуль subprocess. С его помощью можно запускать команды mysqldump или pg_dump прямо из скрипта. Пример для MySQL:

subprocess.run(['mysqldump', '-u', 'user', '-p', 'database_name', '>', 'backup.sql'])

Автоматизируйте резервное копирование с помощью планировщика задач. На Linux используйте cron, а на Windows – Task Scheduler. Это позволит запускать скрипты по расписанию без ручного вмешательства.

Для инкрементального резервного копирования воспользуйтесь библиотекой rsync. Она копирует только измененные файлы, что экономит время и место на диске. Пример команды:

subprocess.run(['rsync', '-avz', 'source_directory/', 'backup_directory/'])

Создавайте лог-файлы для отслеживания успешности резервного копирования. Используйте модуль logging, чтобы фиксировать время выполнения и возможные ошибки:

import logging
logging.basicConfig(filename='backup.log', level=logging.INFO)
logging.info('Резервное копирование завершено успешно')

Для оптимизации хранения резервных копий применяйте сжатие данных. Библиотека gzip позволяет сжимать файлы перед копированием:

import gzip
with open('source_file', 'rb') as f_in, gzip.open('backup_file.gz', 'wb') as f_out:
f_out.write(f_in.read())

Используйте таблицу ниже для выбора подходящего инструмента в зависимости от типа данных:

Тип данных Инструмент
Файлы и директории shutil, rsync
Базы данных subprocessmysqldump, pg_dump)
Инкрементальное копирование rsync
Сжатие данных gzip

Проверяйте целостность резервных копий с помощью контрольных сумм. Модуль hashlib позволяет вычислять MD5 или SHA256 для файлов:

import hashlib
with open('backup_file', 'rb') as f:
file_hash = hashlib.md5(f.read()).hexdigest()

Эти методы помогут сделать процесс резервного копирования быстрым, надежным и автоматизированным.

Уведомления по email о статусе резервных копий

Для автоматизации уведомлений о статусе резервных копий используйте библиотеку smtplib в Python. Создайте скрипт, который проверяет завершение процесса резервного копирования и отправляет отчет на почту. Например, после выполнения команды резервного копирования добавьте проверку кода завершения. Если код равен 0, отправьте сообщение об успешном завершении, иначе – об ошибке.

Настройте параметры SMTP-сервера для отправки писем. Укажите адрес отправителя, получателя, тему и текст сообщения. Для удобства добавьте в текст письма время завершения резервного копирования и размер созданного архива. Это поможет быстро оценить результаты.

Пример кода для отправки уведомления:


import smtplib
from email.mime.text import MIMEText
def send_email(subject, body):
sender = "admin@example.com"
receiver = "team@example.com"
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receiver
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login("user@example.com", "password")
server.sendmail(sender, receiver, msg.as_string())
# Проверка статуса резервного копирования
backup_status = 0  # Замените на реальный код завершения
if backup_status == 0:
send_email("Резервное копирование завершено успешно", "Резервная копия создана без ошибок.")
else:
send_email("Ошибка резервного копирования", "Произошла ошибка при создании резервной копии.")

Добавьте скрипт в планировщик задач (например, cron) для регулярного выполнения. Это позволит получать актуальную информацию о состоянии резервных копий без ручного контроля.

Для улучшения читаемости писем используйте HTML-форматирование. Включите в отчет таблицу с ключевыми параметрами: время начала и завершения, размер архива, количество файлов. Это сделает информацию более структурированной и удобной для анализа.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии