Как разделить файлы из файла Error.log of apache Server во время чтения строки файла по строке непрерывно?
Вопрос
Я сделал это, но у меня есть проблемы с написанием Wellscript. Я запутался с функциональностью команды Caster, а также, когда я вижу вывод Error.log на терминале, он показывает линии с «E», удаленные из слов.
Я написал так, пожалуйста, проведите меня, как я могу решить свою проблему. Я хочу прочитать эту ошибку .Log файл файла по строки и во время строки чтения я хочу разделить фиксированное количество строк в небольшие файлы с суффиксом, т.е. log-aa, log-ab, ... Я сделал это, используя это с помощью Split Command. После расщепления я хочу фильтровать линии с Get или разместить Word в них, используя Regex и храните эту отфильтрованную линии в новый файл. После того, как этот магазин завершен, мне нужно удалить все эти файлы входа.
Я написал так:
enter code here
processLine(){
line="$@"
echo $line
$ tail -f $FILE
}
FILE="/var/log/apache2/error.log"
if [ "$1" == "/var/log/apache2/error.log" ]; then
FILE="/dev/stdin"
else
FILE="$1"
if [ ! -f $FILE ]; then
echo "$FILE : does not exists"
exit 1
elif [ ! -r $FILE ]; then
echo "$FILE: can not read"
exit 2
fi
fi
#BAKIFS=$IFS
#IFS=$(echo -en "\n\b")
exec 3<&0
exec 0<"$FILE"
#sed -e 's/\[debug\].*\(data\-HEAP\)\:\/-->/g' error.log > /var/log/apache2/error.log.1
while read -r line
do
processLine $line
done
exec 0<&3
IFS=$BAKIFS
logfile="/var/log/apache2/error.log"
pattern="bytes"
# read each new line as it gets written
# to the log file
#tail -1 $logfile
tail -fn0 $logfile | while read line ; do
# check each line against our pattern
echo "$line" | grep -i "$pattern"
#sed -e 's/\[debug\].*\(data\-HEAP\)\:/-->/g' error.log >/var/log/apache2/error.log
split -l 1000 error.log log-
FILE2="/var/log/apache2/log-*"
if [ "$1" == "/var/log/apache2/log-*" ]; then
FILE2="/dev/stdin"
else
FILE2="$1"
if [ ! -f $FILE2 ]; then
echo "$FILE : does not exists"
exit 1
elif [ ! -r $FILE2 ]; then
echo "$FILE: can not read"
exit 2
fi
fi
BAKIFS=$IFS
IFS=$(echo -en "\n\b")
exec 3<&0
exec 0<"$FILE2"
while read -r line
do
processLine $line
echo $line >>/var/log/apache2/url.txt
done
exec 0<&3
IFS=$BAKIFS
find . -name "var/log/apache2/logs/log-*.*" -delete
done
exit 0
Приведенный ниже код удаляет файлы после чтения и Spliting Error.Log, но когда я поставлю файл хвостовой доллары, он останавливает удаление файлов, которые я хочу удалить файлы журнала после того, как он достигнет последней строки ERROR.LOG: введите код здесь
processLine(){
line="$@"
echo $line
}
FILE=""
if [ "$1" == "" ]; then
FILE="/dev/stdin"
else
FILE="$1"
# make sure file exist and readable
if [ ! -f $FILE ]; then
echo "$FILE : does not exists"
exit 1
elif [ ! -r $FILE ]; then
echo "$FILE: can not read"
exit 2
fi
fi
#BAKIFS=$IFS
#IFS=$(echo -en "\n\b")
exec 3<&0
exec 0<"$FILE"
while read -r line
do
processLine $line
split -l 1000 error.log log-
cat log-?? | grep "GET\|POST" > storefile
#tail -f $FILE
done
rm log-??
exec 0<&3
#IFS=$BAKIFS
exit 0
Решение
Ваш код кажется излишне длительным и сложным, и логика неясна. Не должно было быть разрешено расти эту большую, не работая правильно.
Учти это:
split -l 1000 error.log log-
cat log-?? | grep "GET\|POST" > storefile
rm log-??
Эксперимент с этим. Если эти три команды делают то, что вы ожидаете, вы можете добавить больше функциональности (например, использование путей, проверку наличия error.log
), но не добавляйте код, пока у вас нет этой части работы.