我使用超棒的 RRDTool 应用程序成功生成了许多图表。但是,我在绘制图表时遇到了一些 VRULE 选项问题。
我正在使用 Bash 脚本生成图表。现在我试图在午夜(UTC+02:00)绘制一条垂直红线。
获取纪元最后 2 个午夜时间的代码:
NOW=`date +%s`
DAY=86400
ZONE=7200
LDAY=$((NOW/DAY))
MID=$((LDAY*DAY))
SAST=$((MID-ZONE))
YEST=$((SAST-DAY))
因此,如果我echo
选择$SAST
或$YEST
,它就会给我昨晚午夜或前一天的纪元时间。
以下是(其中一个)图表的工作片段:
$RRDTOOL graph /var/www/images/graphs/wdata36h.png \
--title 'Pi Traffic Count (wlan0)' \
--watermark "Graph Drawn `date`" \
--vertical-label 'Bytes' \
--lower-limit '0' \
--rigid \
--alt-autoscale \
--units=si \
--width '700' \
--height '200' \
--full-size-mode \
--start end-36h \
'DEF:wrx=/usr/local/bin/system/data.rrd:wrx:AVERAGE' \
'DEF:wtx=/usr/local/bin/system/data.rrd:wtx:AVERAGE' \
'AREA:wtx#0000FFFF:Upload\:' \
'GPRINT:wtx:LAST:\:%8.2lf %s]' \
'STACK:wrx#00CC00FF:Download\:' \
'GPRINT:wrx:LAST:\:%8.2lf %s]'
如您所见,该图表涵盖了过去 36 小时,其中包括 2 个午夜。我尝试过以多种方式添加$SAST
和变量,但它一直将它们读取为变量名称,而不是变量值。$YEST
我尝试添加:
'VRULE:$YEST#FF0000' \
'VRULE:$SAST#FF0000' \
和
'VDEF:yest=$YEST' \
'VDEF:sast=$SAST' \
'VRULE:yest#FF0000' \
'VRULE:sast#FF0000' \
但是引号导致变量被解释为变量名。
我真的不想重新创建data.rrd
文件,因为里面有很多历史数据。这意味着我需要在舞台上graph
而不是update
舞台上绘制这些垂直线。
答案1
我试着每 6 小时画一条垂直线,这是我的工作脚本
#!/bin/sh
NOW=`date +%s`
DAY=86400
day6=21600
ZONE=10800
LDAY=$((NOW/DAY))
MID=$((LDAY*DAY))
SAST=$((MID-ZONE))
sa6=$((SAST+day6))
sa12=$((SAST+day6*2))
sa18=$((SAST+day6*3))
#YEST=$((SAST+43200))
bsd="/home/alex112/us/u2"
#dat0=date -u -d $diff" +%-D
rrdtool graph $bsd/temp01.png \
--watermark "Graph Drawn `date`" \
-w 600 -h 220 -v "Temperature" \
--upper-limit 10 --lower-limit -8 \
DEF:t11=$bsd/temp.rrd:t1:AVERAGE \
DEF:t12=$bsd/temp.rrd:t2:AVERAGE \
CDEF:ct11=t11,10,/ \
CDEF:ct12=t12,10,/ \
LINE1:ct11#00FF00:"fridge" \
LINE1:ct12#0000FF:"stock" \
HRULE:0#000000:"Zero Level" \
HRULE:8#FF0000:"Max temp" \
HRULE:-6#FF0000:"Min Fridge" \
VRULE:$SAST#FF0000: \
VRULE:$sa6#FF0000: \
VRULE:$sa12#FF0000: \
VRULE:$sa18#FF0000:"Zero time"
答案2
经过多次反复尝试(下文将详细介绍)
我发现我不能把所有的参数都放在引号中。
我最终得到了这个:
$RRDTOOL graph /var/www/images/graphs/wdata36h.png \
--title 'Pi Traffic Count (wlan0)' \
--watermark "Graph Drawn `date`" \
--vertical-label 'Bytes' \
--lower-limit '0' \
--rigid \
--alt-autoscale \
--units=si \
--width '700' \
--height '200' \
--full-size-mode \
--start end-36h \
'DEF:wrx=/usr/local/bin/system/data.rrd:wrx:AVERAGE' \
'DEF:wtx=/usr/local/bin/system/data.rrd:wtx:AVERAGE' \
'AREA:wtx#0000FFFF:Upload\:' \
'GPRINT:wtx:LAST:\:%8.2lf %s]' \
'STACK:wrx#00CC00FF:Download\:' \
'GPRINT:wrx:LAST:\:%8.2lf %s]' \
VRULE:$YEST#FF0000 \
VRULE:$SAST#FF0000
我尝试将整个连接graph
成一个变量,然后运行该变量,但它失败了,因为它删除了单引号,然后认为任何空格都意味着一个新的命令或函数,从而导致错误,如ERROR: 'T' is not a valid function name
(从“T”--title'Pi 流量计数 (wlan0)')。
然后我尝试物理删除所有空格(并使用\
),但仍然出现相同的错误,这次是我生成今天的日期造成的:
--watermark "Graph Drawn `date`"
正好是“星期四”。
希望这能帮助遇到与我同样问题的人。