Shell‑скрипты, Ansible, deployment‑сценарии и другие подходы к автоматизации задач администрирования.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 8:08:17
Привет всем. Нужна ваша консультация как решить проблему.
Есть фаил file.tmp в нем запись типа
эту запись я выдергиваю вот так
Код: Выделить всё
test=`cat file.tmp |grep TTM|awk '{print $1}'`
и есть переменная в скрипте типа этого. Время запуска скрипта .
Как сравнить время запуска скрипта $date_t и время последней записи в файле , таким образом типо если между ними 2 часа разница (то есть последняя запись в файле была 2 часа назад ) тогда выполняется условие об ошибке.
echo "Время последней записи в файле произведен 2 часа назад "|mail -s ERROR
admin@admin.ru
Заранее Спасибо.
ruslanstep1
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
FiL
- ст. лейтенант
- Сообщения: 1377
- Зарегистрирован: 2010-02-05 0:21:40
Непрочитанное сообщение
FiL » 2012-02-23 9:42:21
1. а где дата? сравнивать только часы - это плохая идея.
2. а зачем читать время из записи? почему не читать время последней модификации файла?
в общем, надо брать `date +%s` и дату последней модификации в таком же виде. И тогда сравнивать проблем нет.
FiL
-
GhOsT_MZ
- лейтенант
- Сообщения: 662
- Зарегистрирован: 2011-04-25 11:40:35
-
Контактная информация:
Непрочитанное сообщение
GhOsT_MZ » 2012-02-23 10:23:50
Есть у find интересный функционал для поиска по дате/времени изменения. Можно посмотреть в его сторону, а именно, производить любую запись в файл, а через 2 часа искать его по времени и на основании результата поиска делать что-либо.
GhOsT_MZ
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2012-02-23 11:03:56
FiL писал(а):2. а зачем читать время из записи? почему не читать время последней модификации файла?
Наверное в этот файл еще много чего другого пишется, а нужно знать момент последнего "я живой все ОК".
А вот почему есть только время без даты - не понятно.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 11:14:20
сам файл формируется на день строго. То есть ночью в 12:01 уже формируется новый файл.
В файле несколько записей не относящихся к этой строке.
"а зачем читать время из записи? "
отвечу на эти вопросы так. Время надо смотреть потому что если записи нет значит надо перезапустить прогу которая делает определенный важные для меня функции.И ее зависания приводят к потере данных.
" почему не читать время последней модификации файла?"
Другие проги тоже пишут в этот же файл поэтому мне это не подходит.
ruslanstep1
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 11:14:53
kpp писал(а):FiL писал(а):2. а зачем читать время из записи? почему не читать время последней модификации файла?
Наверное в этот файл еще много чего другого пишется, а нужно знать момент последнего "я живой все ОК".
А вот почему есть только время без даты - не понятно.
Ага именно, так как файл формируется на сутки а потом в 12:00 она бэкапится
ruslanstep1
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2012-02-23 11:37:44
Код: Выделить всё
expr `date -j -f "%H:%M:%S" "$время_последнее" "+%s"` - `date -j -f "%H:%M:%S" "$время_контрольное" "+%s"`
В результате кол-во прошедших секунд, разделив на 3600 можно получить кол-во прошедших часов.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 11:52:35
kpp писал(а):Код: Выделить всё
expr `date -j -f "%H:%M:%S" "$время_последнее" "+%s"` - `date -j -f "%H:%M:%S" "$время_контрольное" "+%s"`
В результате кол-во прошедших секунд, разделив на 3600 можно получить кол-во прошедших часов.
сори может сразу не написал это нужно в bash скрипте и предложенный вариант не работает или я просто не то делаю
ruslanstep1
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2012-02-23 11:55:12
Если в вопросе не указана ОС, подразумевается FreeBSD.
На FreeBSD приведенный выше код работает

Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 11:58:20
kpp писал(а):Если в вопросе не указана ОС, подразумевается FreeBSD.
На FreeBSD приведенный выше код работает

ОС AIX и ubuntu

ruslanstep1
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2012-02-23 12:04:07
Тогда так:
Код: Выделить всё
expr `date -d "$время_последнее" +%s` - `date -d "$время_контрольное" +%s`
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-23 14:57:46
kpp писал(а):Тогда так:
Код: Выделить всё
expr `date -d "$время_последнее" +%s` - `date -d "$время_контрольное" +%s`
Все гуд работает в Ubunte , а вот в AIX у date нет опции -d
Есть еще какой нить способ
ruslanstep1
-
Alvares
- прапорщик
- Сообщения: 485
- Зарегистрирован: 2008-07-10 12:48:08
- Откуда: Воронеж
-
Контактная информация:
Непрочитанное сообщение
Alvares » 2012-02-24 10:57:57
У нас в линухе такая оповещалка стоит. Если последняя запись в файле старше 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
Бог создал людей сильными и слабыми. Сэмюэл Кольт сделал их равными...
Alvares
-
FiL
- ст. лейтенант
- Сообщения: 1377
- Зарегистрирован: 2010-02-05 0:21:40
Непрочитанное сообщение
FiL » 2012-02-24 21:19:54
ruslanstep1 писал(а):сам файл формируется на день строго. То есть ночью в 12:01 уже формируется новый файл.
В файле несколько записей не относящихся к этой строке.
"а зачем читать время из записи? "
отвечу на эти вопросы так. Время надо смотреть потому что если записи нет значит надо перезапустить прогу которая делает определенный важные для меня функции.И ее зависания приводят к потере данных.
" почему не читать время последней модификации файла?"
Другие проги тоже пишут в этот же файл поэтому мне это не подходит.
Ну тогда пишите время в файл в виде секунд с начала эпохи. Проще сравнивать будет.
FiL
-
ruslanstep1
- мл. сержант
- Сообщения: 92
- Зарегистрирован: 2010-04-14 11:40:46
Непрочитанное сообщение
ruslanstep1 » 2012-02-24 22:13:32
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
Спасибо чутка поправил под себя и все норма получилась
ruslanstep1