Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Проверка наличия в каталоге ненулевого вчерашнего бэкапа (http://forum.oszone.net/showthread.php?t=349215)

sfap 15-07-2021 13:56 2962207

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

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

Логика должна быть такая:
В каталоге находится самый новый файл, проверяется, что он не старше, например, чем 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 15-07-2021 16:46 2962232

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

#!/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

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


Время: 02:00.

Время: 02:00.
© OSzone.net 2001-