Страница 1 из 1

Сравнить время. КАК?

Добавлено: 2012-02-23 8:08:17
ruslanstep1
Привет всем. Нужна ваша консультация как решить проблему.
Есть фаил file.tmp в нем запись типа

Код: Выделить всё

22:03:45 TTM я живой все ОК
эту запись я выдергиваю вот так

Код: Выделить всё

test=`cat file.tmp |grep TTM|awk '{print $1}'`
и есть переменная в скрипте типа этого. Время запуска скрипта .

Код: Выделить всё

date_t=`date +'%T'`


Как сравнить время запуска скрипта $date_t и время последней записи в файле , таким образом типо если между ними 2 часа разница (то есть последняя запись в файле была 2 часа назад ) тогда выполняется условие об ошибке.
echo "Время последней записи в файле произведен 2 часа назад "|mail -s ERROR admin@admin.ru
Заранее Спасибо.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 9:42:21
FiL
1. а где дата? сравнивать только часы - это плохая идея.
2. а зачем читать время из записи? почему не читать время последней модификации файла?

в общем, надо брать `date +%s` и дату последней модификации в таком же виде. И тогда сравнивать проблем нет.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 10:23:50
GhOsT_MZ
Есть у find интересный функционал для поиска по дате/времени изменения. Можно посмотреть в его сторону, а именно, производить любую запись в файл, а через 2 часа искать его по времени и на основании результата поиска делать что-либо.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:03:56
kpp
FiL писал(а):2. а зачем читать время из записи? почему не читать время последней модификации файла?
Наверное в этот файл еще много чего другого пишется, а нужно знать момент последнего "я живой все ОК".
А вот почему есть только время без даты - не понятно.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:14:20
ruslanstep1
сам файл формируется на день строго. То есть ночью в 12:01 уже формируется новый файл.
В файле несколько записей не относящихся к этой строке.
"а зачем читать время из записи? "
отвечу на эти вопросы так. Время надо смотреть потому что если записи нет значит надо перезапустить прогу которая делает определенный важные для меня функции.И ее зависания приводят к потере данных.
" почему не читать время последней модификации файла?"
Другие проги тоже пишут в этот же файл поэтому мне это не подходит.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:14:53
ruslanstep1
kpp писал(а):
FiL писал(а):2. а зачем читать время из записи? почему не читать время последней модификации файла?
Наверное в этот файл еще много чего другого пишется, а нужно знать момент последнего "я живой все ОК".
А вот почему есть только время без даты - не понятно.
Ага именно, так как файл формируется на сутки а потом в 12:00 она бэкапится

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:37:44
kpp

Код: Выделить всё

expr `date -j -f "%H:%M:%S" "$время_последнее" "+%s"` - `date -j -f "%H:%M:%S" "$время_контрольное" "+%s"`
В результате кол-во прошедших секунд, разделив на 3600 можно получить кол-во прошедших часов.

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:52:35
ruslanstep1
kpp писал(а):

Код: Выделить всё

expr `date -j -f "%H:%M:%S" "$время_последнее" "+%s"` - `date -j -f "%H:%M:%S" "$время_контрольное" "+%s"`
В результате кол-во прошедших секунд, разделив на 3600 можно получить кол-во прошедших часов.
сори может сразу не написал это нужно в bash скрипте и предложенный вариант не работает или я просто не то делаю

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:55:12
kpp
Если в вопросе не указана ОС, подразумевается FreeBSD.
На FreeBSD приведенный выше код работает ;)

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 11:58:20
ruslanstep1
kpp писал(а):Если в вопросе не указана ОС, подразумевается FreeBSD.
На FreeBSD приведенный выше код работает ;)
ОС AIX и ubuntu :smile:

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 12:04:07
kpp
Тогда так:

Код: Выделить всё

expr `date -d "$время_последнее" +%s` - `date -d "$время_контрольное" +%s`

Re: Сравнить время. КАК?

Добавлено: 2012-02-23 14:57:46
ruslanstep1
kpp писал(а):Тогда так:

Код: Выделить всё

expr `date -d "$время_последнее" +%s` - `date -d "$время_контрольное" +%s`
Все гуд работает в Ubunte , а вот в AIX у date нет опции -d
Есть еще какой нить способ

Re: Сравнить время. КАК?

Добавлено: 2012-02-24 10:57:57
Alvares
У нас в линухе такая оповещалка стоит. Если последняя запись в файле старше 10 минут, кидать мессагу на экран.
Может, получится что переделать под себя.

Код: Выделить всё

#!/bin/sh
A=`date | awk '{ print $4 }' | awk -F: ' { print expr $1 * 60 + $2 }'`
B=`ls -l /path/to/file| awk '{ print $8 }' | awk -F:
' { print expr $1 * 60 + $2 + 10 }'`
if [ $A -gt $B ] ; then
 echo "Проверьте службу" | smbclient -M имя_компа
fi

Re: Сравнить время. КАК?

Добавлено: 2012-02-24 21:19:54
FiL
ruslanstep1 писал(а):сам файл формируется на день строго. То есть ночью в 12:01 уже формируется новый файл.
В файле несколько записей не относящихся к этой строке.
"а зачем читать время из записи? "
отвечу на эти вопросы так. Время надо смотреть потому что если записи нет значит надо перезапустить прогу которая делает определенный важные для меня функции.И ее зависания приводят к потере данных.
" почему не читать время последней модификации файла?"
Другие проги тоже пишут в этот же файл поэтому мне это не подходит.
Ну тогда пишите время в файл в виде секунд с начала эпохи. Проще сравнивать будет.

Re: Сравнить время. КАК?

Добавлено: 2012-02-24 22:13:32
ruslanstep1
Alvares писал(а):У нас в линухе такая оповещалка стоит. Если последняя запись в файле старше 10 минут, кидать мессагу на экран.
Может, получится что переделать под себя.

Код: Выделить всё

#!/bin/sh
A=`date | awk '{ print $4 }' | awk -F: ' { print expr $1 * 60 + $2 }'`
B=`ls -l /path/to/file| awk '{ print $8 }' | awk -F:
' { print expr $1 * 60 + $2 + 10 }'`
if [ $A -gt $B ] ; then
 echo "Проверьте службу" | smbclient -M имя_компа
fi
Спасибо чутка поправил под себя и все норма получилась