Способ сегментации результатов процесса

Я хочу каким-то образом взять вывод процесса и разбить его на партии. Например, в моем случае я хочу взять журналы из файла и отправлять мне электронное письмо каждый раз, когда есть запись.

Примерно так:

tail -f /var/log/server.log | segment --delay=5 --command="sendmail me@example.com"

Приведенная выше команда будет ждать до 5 секунд бездействия, а затем вызовет указанную команду с выходными данными.

Есть ли что-нибудь подобное?

2
задан 9 January 2018 в 11:14

1 ответ

С bash вы можете сделать что-то вроде:

segment () {
  while true
  do
    read -t "$TMOUT"  # read input with a timeout of $TMOUT seconds
    printf -v output "%s\n" "$output" "$REPLY"  # append to already read output

    if (( $? == 0 ))
    then
      # timeout not exceeded, so we can continue reading
      continue
    fi
    # some error occurred, run specified command with existing output
    printf "%s\n" "$output" | "$@"
    if (( $? > 128 ))
      # timeout exceeded, so we discard mailed output and continue
      output=""
    else
      # some other error, end loop
      return
    fi
  done
}

Вы можете использовать это так:

tail -f /var/log/server.log | TMOUT=5 segment sendmail me@example.com
1
ответ дан 9 January 2018 в 11:14
  • 1
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51
  • 2
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51
  • 3
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51
  • 4
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51
  • 5
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51
  • 6
    Вы могли бы хотеть добавить что-то о том, как Сервер Ubuntu выпускает прежде , 12.04 LTS установили различное ядро по умолчанию, чем настольные выпуски (поскольку это было другим существенным различием между Сервером и настольными системами Ubuntu). – Eliah Kagan 2 June 2012 в 23:51

Другие вопросы по тегам:

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