Sanoid

Установить TZ

# Создайте drop-in директорию для каждого сервиса
mkdir -p /etc/systemd/system/sanoid.service.d/
mkdir -p /etc/systemd/system/sanoid-prune.service.d/

# Создайте файлы с новыми настройками
echo -e "[Service]\nEnvironment=TZ=Asia/Vladivostok" > /etc/systemd/system/sanoid.service.d/override.conf
echo -e "[Service]\nEnvironment=TZ=Asia/Vladivostok" > /etc/systemd/system/sanoid-prune.service.d/override.conf

# Перезагрузите systemd и перезапустите сервисы
systemctl daemon-reload
systemctl restart sanoid.service sanoid-prune.service

проверить

systemctl show sanoid.service --property=Environment
systemctl show sanoid-prune.service --property=Environment

Проверка на почту

#!/bin/bash

# Настройки
EMAIL="admin@example.org"
EMAILF="jesus@example.org"
LOG_FILE="/var/log/sanoid-monitor.log"

# Функция отправки письма
send_alert() {
    local subject="$1"
    local body="$2"
    echo -e "To: $EMAIL\nFrom: $EMAILF\nSubject: $subject\n\n$body" | msmtp "$EMAIL"
}

# Функция логирования
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Запускаем все три проверки
SNAPSHOTS_OUTPUT=$(/usr/sbin/sanoid --monitor-snapshots 2>&1)
HEALTH_OUTPUT=$(/usr/sbin/sanoid --monitor-health 2>&1)
CAPACITY_OUTPUT=$(/usr/sbin/sanoid --monitor-capacity 2>&1)

# Проверяем статусы
SNAPSHOTS_OK=false
HEALTH_OK=false
CAPACITY_OK=false

# Проверка снапшотов
if [[ $SNAPSHOTS_OUTPUT == OK:* ]] || [[ $SNAPSHOTS_OUTPUT == "OK: all monitored datasets"* ]]; then
    SNAPSHOTS_OK=true
fi

# Проверка здоровья (ищем "OK" в выводе)
if [[ $HEALTH_OUTPUT == OK* ]] && [[ ! $HEALTH_OUTPUT == *CRIT* ]] && [[ ! $HEALTH_OUTPUT == *WARN* ]]; then
    HEALTH_OK=true
fi

# Проверка емкости (ищем "OK" в выводе)
if [[ $CAPACITY_OUTPUT == OK* ]] && [[ ! $CAPACITY_OUTPUT == *CRIT* ]] && [[ ! $CAPACITY_OUTPUT == *WARN* ]]; then
    CAPACITY_OK=true
fi

# Формируем сообщение о проблемах
PROBLEMS=""
if [[ $SNAPSHOTS_OK == false ]]; then
    PROBLEMS="$PROBLEMS\n=== SNAPSHOTS MONITOR ===\n$SNAPSHOTS_OUTPUT\n"
fi

if [[ $HEALTH_OK == false ]]; then
    PROBLEMS="$PROBLEMS\n=== ZPOOL HEALTH ===\n$HEALTH_OUTPUT\n"
fi

if [[ $CAPACITY_OK == false ]]; then
    PROBLEMS="$PROBLEMS\n=== ZPOOL CAPACITY ===\n$CAPACITY_OUTPUT\n"
fi

# Если есть проблемы - отправляем письмо и логируем
if [[ -n "$PROBLEMS" ]]; then
    SUBJECT="ALERT: Sanoid Monitor Failure - $(hostname)"
    BODY="Problems detected at $(date '+%Y-%m-%d %H:%M:%S'):\n$PROBLEMS"

    send_alert "$SUBJECT" "$BODY"
    log "ALERT sent - problems detected"
    exit 1
else
    log "OK - all checks passed"
    exit 0


Revision #4
Created 10 July 2026 06:16:32 by Admin
Updated 10 July 2026 07:44:44 by Admin