Поскольку у вас нет хвоста, который поддерживает все функции, и поскольку у вас нет часов, вы можете использовать простой скрипт, который выполняет бесконечный цикл для выполнения хвоста.
#!/bin/bash
PID=`mktemp`
while true;
do
[ -e "$1" ] && IO=`stat -c %i "$1"`
[ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; }
# as long as the file exists and the inode number did not change
while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]]
do
sleep 0.5
done
[ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID
sleep 0.5
done 2> /dev/null
rm -rf $PID
Возможно, вы захотите использовать trap для чистого выхода из этого скрипта. Это зависит от вас.
По сути, этот скрипт проверяет, изменяется ли номер инода (с помощью stat -c %i "$1"
), чтобы убить команду tail
и начать новую, когда файл воссоздается.
Примечание: вы можете избавиться от echo "restarting tail"
, который будет загрязнять вашу продукцию. Это было полезно только для тестирования. Также могут возникнуть проблемы, если файл будет заменен после того, как мы проверим номер инода и перед тем, как мы начнем хвостовой процесс.