Перейти к основному содержимому

Автоматизация задач и бизнес-процессов

Всем

Определение автоматизации

Автоматизация представляет собой замену ручного выполнения действий программным управлением. Этот подход переводит повторяющиеся операции в режим автономного или полуавтономного выполнения. Автоматизация позволяет выполнять задачи быстрее, надёжнее и с меньшим количеством ошибок по сравнению с ручной обработкой.

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

Основные характеристики автоматизации

ХарактеристикаОписание
ПовторяемостьДействия выполняются многократно без изменений
ПредсказуемостьВходные данные приводят к ожидаемым результатам
ФормализуемостьПравила выполнения описаны чётко и однозначно
МасштабируемостьСценарий работает при увеличении объёма данных
ВоспроизводимостьРезультат остаётся неизменным при повторном запуске

Что такое скрипт

Скрипт представляет собой программу написанную на языке программирования высокого уровня. Скрипты выполняют последовательность инструкций, которые интерпретируются специальной средой выполнения. Каждый скрипт содержит набор команд, определённый порядок их выполнения и условия ветвления.

Языки скриптов обеспечивают доступ к операционной системе, сетевым ресурсам, файловой структуре и внешним API. Интерпретатор выполняет код скрипта пошагово, не требуя стадии компиляции как в случае традиционных приложений.

Распространённые языки скриптинга

ЯзыкОбласть примененияПримеры использования
PowerShellУправление WindowsАдминистрирование систем, работа с реестром, управление Azure
BashУправление Unix/LinuxУстановка пакетов, настройка окружения, обработка файлов
PythonУниверсальная автоматизацияРабота с данными, веб-сервисы, анализ информации
JavaScript/Node.jsВеб-автоматизацияПарсинг сайтов, тестирование API, серверные задачи
Power AutomateLow-code решениеВизуальное создание потоков, интеграция сервисов Microsoft

Структура типичного скрипта

# Определение переменных
$targetPath = "C:\Backup\Documents"
$dateString = Get-Date -Format "yyyy-MM-dd"
$outputFile = "$($targetPath)\backup_$dateString.zip"

# Проверка наличия целевой директории
if (!(Test-Path $targetPath)) {
Write-Host "Ошибка: целевая папка не найдена"
exit 1
}

# Создание архива
Compress-Archive -Path "$($targetPath)\*" -DestinationPath $outputFile

# Проверка результата
$size = (Get-Item $outputFile).Length
Write-Host "Архив создан размером $($size / 1MB) МБ"

Компоненты скриптов

Переменные. Хранят данные между этапами выполнения. Переименование переменной происходит через присвоение нового значения. Пример: $userName = "Alex" создаёт переменную userName со значением "Alex".

Конструкции условного перехода. Определяют разные пути выполнения кода в зависимости от условий. Инструкция if-else проверяет условие и выбирает блок кода для исполнения. Инструкция switch выбирает блок по значению переменной.

Циклы. Выполняют один и тот же блок кода多次 подряд. Конструкция for выполняется фиксированное число раз. Конструкция while повторяется до изменения условия. Конструкция foreach проходит по коллекции элементов.

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

Обработка исключений. Обнаруживают и обрабатывают ошибки выполнения. Блок try содержит потенциально опасный код. Блок catch исполняется при возникновении исключения. Блок finally всегда выполняется независимо от результата.


Классификация автоматизируемых задач

Атомарные операции

Атомарные операции представляют одиночные действия выполнимые за одно обращение к системе. Каждая такая операция завершается полностью или не выполняется вовсе. Операции характеризуются детерминированным результатом одинаковый при одинаковых входных данных.

Тип операцииПримерИнструмент
Файловые операцииКопирование файлаCopy-Item
Сетевые запросыHTTP GET запросInvoke-RestMethod
Системные вызовыПерезапуск службыRestart-Service
Запись в базуINSERT командаsqlcmd
ЛогинованиеЗапись строки в файлAdd-Content

Пример автоматизации копирования файлов:

#!/bin/bash
# Bash скрипт для резервного копирования

SOURCE="/home/user/documents"
DEST="/backup/documents"
DATE=$(date +%Y%m%d)

mkdir -p "$DEST"
cp -r "$SOURCE/" "$DEST/doc_$DATE"

if [ $? -eq 0 ]; then
echo "Резервная копия успешно создана" >> /var/log/backup.log
else
echo "Ошибка создания резервной копии" >> /var/log/backup.log
fi

Последовательные сценарии

Последовательные сценарии выполняют действия строго друг за другом. Результат одного шага становится входом для следующего шага. Такая структура характерна для ETL процессов (Extract–Transform–Load).

ЭтапДействиеДанные
ИзвлечениеПолучение данных из источникаCSV, API, База данных
ТрансформацияОчистка и форматированиеJSON, XML, Строки
ЗагрузкаПомещение в целевую системуТаблица, Файл, Хранилище

Пример Power Automate потока:

Триггер: Получено новое письмо

Извлечь отправителя и тему

Проверить наличие ключевого слова
↓ (Да)
Записать информацию в SharePoint

Отправить уведомление в Teams

Завершить выполнение

Процессы с ожиданием

Процессы с ожиданием включают этапы зависящие от внешних событий или решений людей. Процесс может находиться в состоянии ожидания часы дни или недели. Система сохраняет состояние экземпляра процесса для продолжения выполнения после события.

Элементы процесса с ожиданием:

События. Маркеры начала или окончания этапов процесса. Событие «Получение оплаты» запускает следующий этап. Событие «Истечение срока» активирует альтернативный путь выполнения.

Ожидание ввода. Шаги требующие вмешательства человека. Форма предоставляет интерфейс для заполнения необходимых данных. Задача назначается конкретному пользователю системы.

Таймеры. Автоматический переход при наступлении времени. Таймер запускает событие через заданный интервал. Превышение таймера приводит к эскалации или изменению статуса.

Адаптивные процессы

Адаптивные процессы меняют логику выполнения динамически на основе контекста. Маршрут процесса зависит от текущих данных состояния системы и внешних факторов. Реализация требует правил оценки и принятия решений.

Пример маршрутизации обращения:

КатегорияПриоритетМаршрут
VIPВысокийУскоренное согласование
СтандартОбычныйСтандартная очередь
ТехническийСреднийИТ поддержка
ФинансовыйНизкийБухгалтерия

Примеры автоматизации

Резервное копирование данных

Скрипт автоматически создаёт архивы директорий с датами версионирования. Пользователь задаёт расписание запуска один раз скрипт продолжает работу самостоятельно.

# PowerShell скрипт резервного копирования

param(
[string]$SourcePath = "D:\Данные",
[string]$BackupPath = "E:\Backups",
[int]$KeepDays = 30
)

$today = Get-Date -Format "yyyyMMdd"
$backupFile = Join-Path $BackupPath "backup_$today.zip"

# Проверка пространства на диске
$freeSpace = (Get-PSDrive E).Free
$sourceSize = (Get-ChildItem -Path $SourcePath -Recurse -Force).Length

if ($sourceSize -gt $freeSpace) {
throw "Недостаточно места для резервного копирования"
}

# Создание архива
Compress-Archive -Path "$SourcePath\*" -DestinationPath $backupFile -Force

# Удаление старых бэкапов
Get-ChildItem -Path $BackupPath -Filter "backup_*.zip" |
Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-$KeepDays) } |
Remove-Item

# Логирование
$logEntry = "$(Get-Date) — Архив создан: $(($backupFile | Split-Path) | Measure-Object)"
Add-Content -Path "C:\Logs\backup.log" -Value $logEntry

Мониторинг систем

Скрипт периодически проверяет доступность критических сервисов и отправляет уведомления при сбоях.

#!/usr/bin/env python3
import requests
import smtplib
from email.mime.text import MIMEText

def check_service(url):
response = requests.get(url, timeout=10)
return response.status_code == 200

def send_alert(service_name, status):
msg = MIMEText(f"Сервис {service_name}: {'Работает' if status else 'Не отвечает'}")
msg['Subject'] = f"Alert: {service_name}"
msg['From'] = "monitor@company.com"
msg['To'] = "admin@company.com"

smtp_server = "smtp.company.com"
smtp_port = 587
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.send_message(msg)
server.quit()

services = [
("API Gateway", "http://api.company.com/health"),
("Database", "tcp://db.company.com:3306"),
]

for name, url in services:
status = check_service(url)
send_alert(name, status)

Автообработка заявок

Поток автоматически перерабатывает входящие заявки и направляет их нужным специалистам.

ШагДействиеРезультат
1Получение заявки из формыДанные заявки в переменной
2Валидация обязательных полейСтатус «В обработке»
3Проверка категорийВыбор отдела назначения
4Создание задачи в системеID задачи в ответе
5Уведомление заявителяПисьмо подтверждение

Инструменты планирования

Планировщик задач Windows (Task Scheduler)

Планировщик заданий Windows обеспечивает запуск скриптов по расписанию. Пользователь создаёт задачу указывает программу или скрипт устанавливает триггеры и настройки безопасности.

Компоненты задачи:

Триггеры. Определяют время и частоту запуска. Триггер «При запуске» срабатывает при старте системы. Триггер «По расписанию» запускает по графику. Триггер «При событии» реагирует на системные события.

Действия. Указывают команду для выполнения. Действие запускает exe файл или скрипт. Параметры команды передаются через поле «Добавить аргументы».

Условия. Настройка запуска по условиям среды. Условие «Начинать только если подключено питание» пропускает задачу при работе от батареи. Условие «Разблокировать сеть» требует подключения к интернету.

Настройки доступа. Учётная запись под которой выполняется задача. Учетная запись с правами администратора открывает доступ к защищённым ресурсам. Разрешение «Выполнять только если пользователь вошёл» гарантирует корректное взаимодействие с интерфейсом.

Планировщик cron

Cron используется в Unix Linux системах для планирования задач. Пользователь редактирует таблицу cron добавляя новые записи каждую строка определяет задачу.

Структура строки cron:

ПолеЗначенияОписание
Минута0–59Время минуты запуска
Час0–23Время часа запуска
День месяца1–31Номер дня месяца
Месяц1–12Номер месяца
День недели0–6День недели (0 = воскресенье)

Пример строки cron:

# Ежедневное резервное копирование в 03:00
0 3 * * * /usr/local/bin/backup.sh

# Еженедельная очистка лог файлов каждый понедельник в 04:00
0 4 * * 1 /usr/local/bin/cleanup.sh

# Ежеквартальный отчёт первый день квартала в 08:00
0 8 1,15,30 */3 * /usr/local/bin/report.sh

Система systemd timers

Systemd timers заменяют cron в современных Linux дистрибутивах. Конфигурация разделена на два файла единицу задания и таймер. Это упрощает логирование и управление зависимостями.

Файл услуги .service:

[Unit]
Description=Script backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup

[Install]
WantedBy=multi-user.target

Файл таймера .timer:

[Unit]
Description=Daily backup timer

[Timer]
OnCalendar=daily
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

Принципы построения надёжных сценариев

Обработка исключений

Каждый скрипт должен предусматривать возможные ошибки выполнения. Код проверяет успешность операций и предпринимает соответствующие действия при неудаче. Логи содержат полную информацию для диагностики проблем.

import subprocess

try:
result = subprocess.run(["command", "argument"], capture_output=True, text=True)
if result.returncode != 0:
print(f"Ошибка выполнения: {result.stderr}")
except FileNotFoundError:
print("Команда не найдена в системе")
except Exception as e:
print(f"Неожиданная ошибка: {e}")

Повторные попытки

Операции с сетью базами данных и внешними сервисами подвержены временным сбоям. Система делает несколько попыток с экспоненциальной задержкой между ними. Это повышает вероятность успешного завершения при краткосрочных проблемах.

import time

def execute_with_retry(func, max_attempts=3, delay_factor=2):
attempt = 0
while attempt < max_attempts:
try:
return func()
except TemporaryError:
attempt += 1
if attempt >= max_attempts:
raise
time.sleep(delay_factor ** attempt)

Идемпотентность

Идемпотентная операция даёт одинаковый результат при повторном выполнении. Это защищает от дублирования данных при сбоях и перезапусках. Для достижения идемпотентности используются уникальные идентификаторы проверки существования перед выполнением действия.

-- Идемпотентная операция вставки
INSERT INTO users (id, name)
VALUES (123, 'Alex')
ON CONFLICT (id) DO NOTHING;

Валидация данных

Скрипт проверяет соответствие входных данных формату требованиям. Проверки происходят до выполнения операций чтобы избежать ненужных расходов ресурсов. Неудовлетворительные данные вызывают немедленный отказ выполнения с понятным сообщением об ошибке.

from datetime import datetime

def validate_date(date_string):
pattern = "%Y-%m-%d"
try:
datetime.strptime(date_string, pattern)
return True
except ValueError:
return False

Интеграция с системами

Работа с базами данных

Подключение к базе данных осуществляется через драйверы обеспечивающие SQL коммуникацию. Скрипт загружает credentials безопасно использует пулы соединений. Результаты запросов обрабатываются выборочно транзакции поддерживают целостность.

import psycopg2

conn = psycopg2.connect(
host="localhost",
database="mydb",
user="user",
password="***"
)
cursor = conn.cursor()
cursor.execute("SELECT id, name FROM users WHERE active = true")
results = cursor.fetchall()
cursor.close()
conn.close()

REST API взаимодействия

REST API предоставляют стандартизированный способ обмена данными между системами. Скрипт формирует запросы с необходимыми параметрами заголовками и телом. Сервер возвращает статус ответа и тело с данными. Обработка статусов позволяет реагировать на успех или ошибку.

import requests

response = requests.post(
"https://api.example.com/Данные",
json={"key": "value"},
headers={"Authorization": "Bearer token"}
)
status = response.json()

Работа с файлами

Файловая система предоставляет хранилище данных структурированное организацией. Скрипт читает файлы в текстовом или бинарном формате записывает результаты в новые файлы. Управление директориями включает создание удаление поиск файлов по маскам.

with open("input.txt", "r", encoding="utf-8") as f:
lines = f.readlines()

for line in lines:
processed = line.upper()
with open("output.txt", "a", encoding="utf-8") as out:
out.write(processed)

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).