-
Notifications
You must be signed in to change notification settings - Fork 8
/
locktail_rotate.sh
executable file
·36 lines (33 loc) · 1.05 KB
/
locktail_rotate.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
#
# AUTHOR: Yanpeng Lin
# DATE: Mar 30 2014
# DESC: lock a rotating file(filename rotated by date) and tail
#
PID=$( mktemp )
while true;
do
CURRENT_PATTERN=$( eval "$2")
CURRENT_PATH="$1"
CURRENT_TARGET=$( echo ${CURRENT_PATH} | sed "s/DATE_ROTATE/$CURRENT_PATTERN/g" )
# echo $CURRENT_TARGET
if [ -e ${CURRENT_TARGET} ]; then
IO=`stat -c %i ${CURRENT_TARGET}`
tail -f ${CURRENT_TARGET} 2> /dev/null >1 & echo $! > ${PID};
fi
# as long as the file exists and the inode number did not change
while [[ -e ${CURRENT_TARGET} ]] && [[ ${IO} = `stat -c %i ${CURRENT_TARGET}` ]]
do
CURRENT_PATTERN=$( eval "$2")
CURRENT_PATH="$1"
CURRENT_TARGET=$( echo ${CURRENT_PATH} | sed "s/DATE_ROTATE/$CURRENT_PATTERN/g" )
#echo $CURRENT_TARGET
sleep 0.5
done
# echo "[ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID"
if [ ! -z ${PID} ]; then
kill `cat ${PID}` 2> /dev/null && echo > ${PID}
fi
sleep 0.5
done 2> /dev/null
rm -rf ${PID}