Я пойду на это.Возможно, я кое-что узнаю, если мой нехитрый bash-код будет тщательно проверенСуществует вероятность того, что для этого уже существует несколько миллиардов решений, но я не собираюсь это выяснять, поскольку уверен, что вы тралили глубины и ширины кибер-океана.Похоже, то, что вы хотите, можно разделить на два бита: 1) через равные промежутки времени получать «последний хвост» файла, 2) если последний хвост действительно существует, отправить его по электронной почте.Для регулярных интервалов в 1) используйте cron.Для получения последней версии 2) вам нужно будет следить за размером файла.Сценарий bash ниже делает это - решение 2), которое может быть вызвано cron.Он использует размер кэшированного файла для вычисления фрагмента файла, который ему нужен для отправки по почте.Обратите внимание, что для файла myfile создается другой файл .offset.myfile.Также скрипт не допускает пути компонентов в имени файла.Перепишите или исправьте его в вызове [например (cd / foo / bar && segtail.sh zut), предполагая, что он называется segtail.sh].
#!/usr/local/bin/bash
file=$1
size=0
offset=0
if [[ $file =~ / ]]; then
echo "$0 does not accept path components in the file name" 2>&1
exit 1
fi
if [[ -e .offset.$file ]]; then
offset=$(<".offset.$file")
fi
if [[ -e $file ]]; then
size=$(stat -c "%s" "$file") # this assumes GNU stat, possibly present as gstat. CHECK!
# (gstat can also be Ganglias Status tool - careful).
fi
if (( $size < $offset )); then # file might have been reduced in size
echo "reset offset to zero" 2>&1
offset=0
fi
echo $size > ".offset.$file"
if [[ -e $file && $size -gt $offset ]]; then
tail -c +$(($offset+1)) "$file" | head -c $(($size - $offset)) | mail -s "tail $file" foo@bar
fi