跳到内容

Direwolf日志输出

Direwolf在运行时,屏幕会输出反馈信息,我们根据这些信息可以了解程序的启动和运行状态、接收发射和中继信标的记录、每个信标的内容信号强度等等信息,参考这些信息对Direwolf的统计、分析、排错、优化有很大帮助。

但Direwolf不会保存这些信息,就是说只有在前台运行时才会显示这些信息,而官方文档中(83页、166页)给出方案的输出结果则不那么详细,博主在日常使用中也是非常苦恼,经过一段时间摸索,发现一个比较简单实用的方法来保存输出的信息。

《APRS折腾之:IGate网关》为例,博文末尾在开机启动文件 nano /etc/rc.local 中写入了Direwolf的启动命令:

rtl_fm -f 144.640M -p 17 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 - &
exit 0

这种方式无法保存输出的信息,要想实现记录只需在末尾添加“>>”重定向,指向一个日志文件direwolf.log即可,但这样保存的输出信息没有时间前缀,那么我们加入ts命令实现吧。

首先安装这个ts命令工具:

apt update
apt install moreutils

然后将ts和时间格式加入启动命令结尾,而后用“>>”指向一个日志文件:

rtl_fm -f 144.640M -p 17 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 - | ts "%Y-%m-%d %H:%M:%S" >> /root/direwolf.log &
exit 0

最后查看一下 /root/direwolf.log 日志文件内容:

非常详细,需要时随即查阅。

那么问题来了,Direwolf每天都会生成大量的日志信息,时间久了文件体积会变大,而且查阅起来也会很麻烦。

我们只需一个小脚本,把昨天的日志备份起来,保留一个月,自动滚动删除:

nano /root/shell/dw_logbak.sh
#!/bin/sh

DATE_Y=`date +"%Y-%m-%d" -d "-1 days"`
DW_LOG="/root/direwolf.log"
BAK_PATH="/root/bak"
BAK_LOG="$BAK_PATH/direwolf_$DATE_Y.log"

if [ ! -d $BAK_PATH ]
    then
        mkdir $BAK_PATH
fi

cp $DW_LOG $BAK_LOG
echo '' > $DW_LOG
cd $BAK_PATH
find . -ctime +30 | xargs rm -f

加入计划任务,次日0点执行:

crontab -e
00 00 * * * /root/shell/dw_logbak.sh

打完收工!

日志不但可以帮助我们优化Direwolf,还可以为遥测提供数据统计(参考博文《Direwolf的APRS遥测功能》),还有博主以后要折腾的LCD4Linux统计显示屏,也为其提供数据统计。

发表于无线电

5 条评论

  1. bh2ufz bh2ufz

    拜读啦! 学习中

  2. BI9ABS BI9ABS

    /usr/local/bin/direwolf -c /root/direwolf.conf -r 24000 -D 1 -l /var/www/html/log/

    我是用-l 输出了aprs的日志,出来就是csv格式,按日生成,不过没有系统日志详细

  3. bi1niz bi1niz

    direwolf的解码日志(就是那个csv日志)有个bug:如果comments内容包含控制字符,会在csv里直接输出换行,导致csv格式破坏,而csv又没有对field进行加引号处理,我替了issuse了,不过好像还没修复

    • BH9EQH BH9EQH

      而且那个时间好像也不对,不能自动适配时区

  4. BI9BCQ BI9BCQ

    BI9BCQ 补课来了

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

允许上传的最大文件为2 MB。 您可以上传:图像, 视频, 存档 Drop file here