https://app.ontik.ru в коде предназначен для будущего запуска; в собственной тестовой установке используйте адрес своего backend.Источник может работать на компьютере или сервере; получение уведомлений настраивается отдельно. Платформы и устройства →
Запуск задачи ещё не означает успешную копию
Планировщик запустил резервное копирование ночью, но утром обнаружилось, что места на диске не хватило. Смотреть журнал каждого запуска вручную неудобно. Полезнее отправлять краткий итог: какая задача закончилась, с каким результатом и где искать подробности.
Ontik принимает итог, но не создаёт резервную копию и не проверяет её восстановление. Эти проверки выполняет ваша программа или система резервного копирования.
Какие сигналы действительно полезны
- Задача завершилась с ненулевым кодом.
- Проверка целостности или пробное восстановление не прошли.
- Размер или свежесть копии отличаются от ожидаемых.
- Ожидаемый запуск не состоялся — если это обнаружила внешняя система.
Если сервер выключен и скрипт вообще не запустился, он не сможет отправить уведомление о собственном отсутствии. Контроль пропущенных запусков требует отдельного watchdog или мониторинга; встроенного контроля heartbeat в текущем MVP Ontik нет.
Учебный пример на Python
Скачайте ↓ Скачать backup_watch.py. Нужен Python 3, сторонние пакеты не требуются. Обёртка запускает указанную команду и составляет событие по её коду завершения. По умолчанию HTTP выключен: JSON выводится в терминал.
"""Учебная обёртка: по умолчанию печатает событие без HTTP-запроса."""
import json
import os
import subprocess
import sys
import urllib.request
def notify(payload):
if os.environ.get("ONTIK_DRY_RUN", "1") == "1":
print(json.dumps(payload, ensure_ascii=False, indent=2))
return
key = os.environ["ONTIK_API_KEY"]
base = os.environ.get("ONTIK_BASE_URL", "https://app.ontik.ru").rstrip("/")
body = json.dumps(payload, ensure_ascii=False).encode("utf-8")
request = urllib.request.Request(base + "/v1/events", data=body,
headers={"Content-Type": "application/json", "X-Ontik-Key": key})
with urllib.request.urlopen(request, timeout=10) as response:
print("Ontik:", response.status)
def main():
command = sys.argv[1:]
if not command:
print("Usage: python backup_watch.py COMMAND [ARGS...]", file=sys.stderr)
return 2
try:
result = subprocess.run(command, check=False)
code = result.returncode
except OSError:
code = 127
payload = {
"event": "Ошибка резервного копирования" if code else "Резервная копия завершена",
"meta": {"job": "nightly-backup", "exit_code": code,
"result": "failed" if code else "completed"},
}
try:
notify(payload)
except Exception as error:
print("Не удалось отправить событие:", type(error).__name__, file=sys.stderr)
return code
if __name__ == "__main__":
sys.exit(main())
Безопасная проверка ошибки — команда ничего не копирует и намеренно возвращает код 1:
Выберите свою платформу. Код Python остаётся одним и тем же; отличаются команды запуска и переменные окружения.
Windows · PowerShell
python --version $env:ONTIK_DRY_RUN = "1" python backup_watch.py python -c "import sys; sys.exit(1)"
Linux · Bash
python3 --version export ONTIK_DRY_RUN="1" python3 backup_watch.py python3 -c "import sys; sys.exit(1)"
macOS · Zsh / Bash
python3 --version export ONTIK_DRY_RUN="1" python3 backup_watch.py python3 -c "import sys; sys.exit(1)"
Откройте терминал в папке скачанного файла. Для Windows также подойдёт py -3, если команда python недоступна. Вложенная учебная команда должна использовать установленный у вас Python.
Для проверки успеха замените sys.exit(1) на sys.exit(0). Вы увидите разные заголовки и exit_code. Ненулевой код самой обёртки в первом тесте ожидаем.
Как подключить реальную задачу
После открытия доступа создайте проект, включите Web Push, сохраните ключ в окружении и замените учебную команду на ваш штатный скрипт резервного копирования. Переменные окружения для вашей платформы:
Выберите свою платформу. Код Python остаётся одним и тем же; отличаются команды запуска и переменные окружения.
Windows · PowerShell
$env:ONTIK_API_KEY = "pk_live_КЛЮЧ_ПРОЕКТА" $env:ONTIK_BASE_URL = "https://app.ontik.ru" $env:ONTIK_DRY_RUN = "0"
Linux · Bash
export ONTIK_API_KEY="pk_live_КЛЮЧ_ПРОЕКТА" export ONTIK_BASE_URL="https://app.ontik.ru" export ONTIK_DRY_RUN="0"
macOS · Zsh / Bash
export ONTIK_API_KEY="pk_live_КЛЮЧ_ПРОЕКТА" export ONTIK_BASE_URL="https://app.ontik.ru" export ONTIK_DRY_RUN="0"
Для собственной тестовой установки укажите её backend вместо будущего публичного адреса. Подключайте обёртку в том окружении, где команда выполнялась раньше: должны сохраниться рабочий каталог, доступы и аргументы.
Исключение при отправке уведомления не превращает успешное копирование в неудачное. Пример сохраняет исходный код задачи, а ошибку уведомления отдельно пишет в stderr.
Что проверить перед использованием
Код 0 — только утверждение команды об успешном завершении. Надёжность копии проверяют восстановлением и проверкой целостности. Добавьте эти шаги в свой процесс до отправки итогового события.
В Ontik передавайте job_id, результат, длительность и ссылку на журнал. Полный лог, пути с секретами и содержимое копии не нужны. Если API недоступен, этот простой пример не хранит локальную очередь повторов. Для важных задач добавьте её на стороне источника.
Посмотрите, какое событие увидит команда
В демо можно изменить параметры и получить карточку события с имитацией уведомления. Аккаунт и разрешение браузера не нужны.
Попробовать пример →Инструкция подключения →Связанный сценарий: как использовать Ontik для этой задачи.
Читайте также
Вопрос по примеру? info@ontik.ru
