Проверка наличия в каталоге ненулевого вчерашнего бэкапа

Ответить
 • Просмотры: 3
Аватара пользователя
sfap

Проверка наличия в каталоге ненулевого вчерашнего бэкапа

Сообщение sfap »

Задача, казалось бы несложная, но не получается сделать, чтобы правильно работало.



Есть каталог, куда ежедневно складывается бэкап (или не складывается, в случае сбоев, для проверки чего, собственно, и нужен этот скрипт)



Логика должна быть такая:

В каталоге находится самый новый файл, проверяется, что он не старше, например, чем 1500 минут (25 часов), и то, что файл ненулевого размера.

Если условия совпадают, то скрипт должен отдать 0, в противном случае 1

Вот, что я сделал:



#!/bin/bash

BACKUPDIR=/mnt/MY_DIR

LASTBACKUP=$(find $BACKUPDIR -mmin -1500 | awk '(NR == 2)')

if test -s $LASTBACKUP

then echo 0

else echo 1

fi



Обнаружил, что некорректно работает, да и тут сразу видна ошибка: в случае, если find $BACKUPDIR -mmin -1500 ничего не найдёт, то переменной $LASTBACKUP ничего не присвоится. Были варианты, и наиболее приближенные к правде, однако и они выдавали 0 тогда, когда должны были выдавать 1.

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

Смотрел ман по команде test, с ним удобно работать, когда известно имя файла, которое будем проверять, так же не удалось найти способ проверить, "на сколько новый или старый файл", кроме как ключ к команде find.



поделитесь, пожалуйста своими соображениями.
Аватара пользователя
sfap

Re: Проверка наличия в каталоге ненулевого вчерашнего бэкапа

Сообщение sfap »

Удалось сделать код рабочим, выглядит это примерно так:



#!/bin/bash

BACKUPDIR=/mnt/BACKUPDIR

LASTBACKUP=$(find $BACKUPDIR -mmin -1500 | awk '(NR == 2)')

a=$(find $BACKUPDIR -mmin -1500 | awk '(NR == 2)' | wc -l)

b=0

if [ $a \> $b ]

then

if test -s $LASTBACKUP

then

echo 0

else

echo 1

fi

else

echo "1"

fi



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

Вернуться в «Программирование в *nix»