0

我想记录星号命令行的数据。但条件是我想分别记录呼叫的数据,即我想将每个呼叫的数据记录在单独的文件中。

有没有办法做到这一点?

4

1 回答 1

0

如果星号中没有内置功能可以执行此操作,这里有一个 bash 解决方案:

#!/bin/bash
echo "0" >/tmp/numberoflines
IFS=''
pathToLogFile = /path/to/log/file
while [ 1 ]
do
    NUMBER=$(cat /tmp/numberoflines)
    LINECOUNT=$(wc -l < $pathToLogFile)
    DIFFERENCE=$(($LINECOUNT-$NUMBER))

    if [ $DIFFERENCE != 0 ]; then
        lines=($(tail -n $DIFFERENCE $pathToLogFile))
        for line in $lines; do
            callID = `expr "$line" : 'CALLID_REGEX (see below)'`
            $(echo "$line" >> /path/to/log/directory/$callID)
        done
    fi

sleep 5;
echo "$LINECOUNT" >/tmp/numberoflines
done

未经测试

它应该被用来解决这个问题。

正则表达式: normaly: /\[(C\d{8})\]/. 遗憾的是我不知道 bash 的语法。对不起。您必须自己将其转换为 bash 语法。


这个想法是:记住日志文件中由 bash 脚本处理的最后一行。检查日志文件的行数。如果有更多行然后记住的行:遍历新行并在每行的开头提取调用ID(格式:C********(* 是数字)。用文字表示:后面是一个C 8 位数字)。现在将整行附加到日志文件的末尾。文件名是提取的callid。


编辑有关呼叫 ID 的信息(不要将其与呼叫者 ID 混淆):https ://wiki.asterisk.org/wiki/display/AST/Unique+Call-ID+Logging

于 2015-08-11T16:06:16.400 回答