Восстановление данных после копирования файла на блочное устройство

Вот awk программа (в сценарии bash), которая анализирует вывод ваших команд и обнаруживает строки с проблемами в них. Мой awk ржавый, поэтому он, несомненно, не элегантен, но он работает.

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

Я оставил операторы печати, которые использовал для отладки, закомментировав их.

Чтобы не использовать отдельный временный или постоянный файл только для программы awk, она добавляется в командную строку awk в одинарных кавычках, чтобы сделать ее одним аргументом и чтобы bash не расширял ее.

Чтобы использовать его, вы должны добавить его в конец вашего текущего конвейера с чем-то вроде

redis-cli -r -1 -i 300 INFO | grep slave | parse_redis > some-file

Если some-file не пуст, то отправьте его по электронной почте самому себе.

Код awk довольно прост, что позволяет легко модифицировать его под свои нужды.

Я не описал, как запускать это из cron и т.д.. Если вам нужна помощь в интеграции, добавьте комментарий к этому ответу.

Если redis/ваш pipe может выдавать другие типы вывода, не перечисленные в вашем примере, то вам придется модифицировать ваш pipe или эту awk программу для их обработки.

#!/bin/bash
## parse_redis
## parses redis output looking for state and lag problems

## sets awk's field separator to a comma to make things easy
## whole awk program is a single single-quoted string on the awk command line

awk -F ',' '

BEGIN {
  max_lag = 5 ## threshold for acceptable lag times
}

##{ print "input is "  NR " " $0 }
NR == 1 {next} ## skip first line of input

problem=0 ## flag for problem detected

## detect anything except online
##{ print "field 3 [" $3 "]" }
## If the third field does not contain state=online, then it is a problem
$3 !~ "state=online" {problem = 1}

## Get the value for lag and see if it is too large
## lag is in the 5th field starting at the 5th character
## extract the value from the 5th character to the end
## of the field and turn it into a number
## Probably would work without turning it into a number
{
  ##{ print "field 5 [" $5 "]" }
  lag = strtonum(substr($5, 5))
  ##{ print "lag [" lag "]" }
  if (lag > max_lag) problem = 1
}

##{ print "problem [" problem "]" }

{if (problem == 0) next}

{print}
'
3
30.04.2020, 20:19
0 ответов

Теги

Похожие вопросы