रेडिस: 2.0.4, 2.4.1, ...रेडिस: लोहे को पाइप करते समय मेरे क्षेत्र को कौन खा रहा है?
मैं एक सूची की लंबाई की जांच करने के लिए एक नागियो प्लगइन लिखने जा रहा हूं। यहाँ मेरी स्क्रिप्ट है:
#!/bin/sh
help()
{
echo "Usage: $0 <host> <port> <key> -w <warning> -c <critical>"
}
case "$1" in
--help)
help
exit
;;
esac
if [ $# -eq 0 ]; then
help
exit 3
fi
if [ $# -ne "7" ]; then
help
exit 4
fi
if [ $4 !="-w" -o $6 !="-c" ]; then
help
exit 5
fi
REDIS_CLI="/usr/local/redis/bin/redis-cli"
LLEN=`$REDIS_CLI -h $1 -p $2 llen $3 | awk '{ print $2 }'`
if [ $LLEN -lt $5 ]; then
echo "$3.llen:$2 OK - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 0
elif [ $LLEN -ge $5 -a $LLEN -lt $7 ]; then
echo "$3.llen:$2 WARNING - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 1
elif [ $LLEN -ge "$7" ]; then
echo "$3.llen:$2 CRITICAL - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 2
fi
लेकिन जब /usr/lib64/nagios/plugins/redis_llen.sh 192.168.5.201 2468 -w 90000 -c 100000
चल मैं निम्नलिखित त्रुटि मिली:
/usr/lib64/nagios/plugins/redis_llen.sh: line 31: [: -lt: unary operator expected
/usr/lib64/nagios/plugins/redis_llen.sh: line 34: [: too many arguments
/usr/lib64/nagios/plugins/redis_llen.sh: line 37: [: -ge: unary operator expected
डिबग मोड में यह चल रहा है, मैंने पाया कि LLEN
के मूल्य ... खाली है।
# /usr/local/redis/bin/redis-cli -h 192.168.5.201 -p 2468 llen queue_1
(integer) 965
क्यों पाइपलाइन मेरी क्षेत्रों निगल करता है: llen queue_1
रिटर्न सही परिणाम के बाद से? (न केवल करने के लिए awk
लेकिन यह भी echo
, tee
, ...):
# /usr/local/redis/bin/redis-cli -h 192.168.5.201 -p 2468 llen queue_1 | \
awk '{ print $0 }'
961
मैं क्षेत्रों की संख्या की जांच और इसी प्रिंट एक समाधान के रूप कर सकते हैं:
| awk '{ if (NF == 2) print $2; else print $1 }'`
लेकिन मैं सच में करना चाहते हैं पता है क्यों ऐसा होता है? (interger)
और संख्या के बीच कोई शून्य या विशेष चरित्र है?
पीएस: ऐसा लगता है कि कुछ अन्य रेडिस संस्करण (ई.एक्स: 1.3.7 के लिए) को यह समस्या नहीं मिलती है।
आप आप की तरह लग खोल डिबगिंग के बारे में जानें, क्या आपने 'सेट -vx' सेट किया था, हां? यदि नहीं, तो मूल्यांकन के बाद निष्पादन ट्रेस और चर के मान देखने के लिए उस स्क्रिप्ट के शीर्ष को जोड़ें। भी, आप '| का उपयोग कर सकते हैं बिल्ली-स्वेच्छा 'को आपके पाइपलाइन में शामिल कुछ ctrl-chars को देखने के लिए जरूरी है (केवल कोड के अलग-अलग हिस्सों को डीबग करने के लिए एक टीएमपी सहायता के रूप में, जैसा कि आप अपने प्रश्न के निचले हिस्से में दिखाते हैं)। एक संभावित संदिग्ध, '^ एम 'डीओएस' \ आर' सीआर चार। सौभाग्य। – shellter
जैसा कि मैंने उपरोक्त कहा है, मुझे लगता है कि डीबग मोड में चलते समय LLEN का मान खाली है। '| बिल्ली-स्वेत 'केवल संख्या ही देता है। मुझे यकीन है कि मेरी फाइल में कोई^^ एम' नहीं है (क्योंकि यह लिनक्स मशीन पर लिखा गया था)। क्या होता है यह देखने के लिए आप अपनी मशीन पर केवल 'रेडिस-क्ली' कमांड का परीक्षण कर सकते हैं। FAKETTY के लिए – quanta