Я хочу каким-то образом взять вывод процесса и разбить его на партии. Например, в моем случае я хочу взять журналы из файла и отправлять мне электронное письмо каждый раз, когда есть запись.
Примерно так:
tail -f /var/log/server.log | segment --delay=5 --command="sendmail me@example.com"
Приведенная выше команда будет ждать до 5 секунд бездействия, а затем вызовет указанную команду с выходными данными.
Есть ли что-нибудь подобное?
С 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