#!/bin/bash
SERVICE="$1"
RESULT=`ps -a | sed -n /${SERVICE}/p`
MEM=$(ps aux | sort -rk +4 | grep $1 | grep -v grep | awk '{print $4}' | awk 'NR == 1')
if [ "${RESULT:-null}" = null ]; then
echo "$1 is NOT running"
else
echo "$MEM"
fi
if [ "$MEM" -ge 1 ]; then
mailx -s "Alert: server needs to be checked" [email protected]
fi
使用ps輸出的問題,通過管道輸送到sed的是即使沒有進程正在運行,它發現自己:
ps aux | sed -n /nfdump/p
root 30724 0.0 0.0 105252 884 pts/1 S+ 14:16 0:00 sed -n /process/p
和他們我的腳本繞過了「服務不運行」的預期結果,並直接回顯$ MEM,在這種情況下,它將爲0.0。 sed是否有一個grep -v grep eqivalent讓自己擺脫困境?
爲什麼不把它管道....的grep -v SED: 'ps aux | grep -v sed | sed -n'/ nfdump/p''?但你也可以嘗試'ps aux | sed -n'/ sed/n;/nfdump/p' '。如果找到sed,'/ sed/n;'會繼續輸入下一行。 –
兩種方式都在腳本之外工作,但是通過腳本和第一個示例,它會繞過「服務未運行」並直接轉到執行$ MEM。如果我使用第二個示例,它會停在「服務未運行」,即使我對運行的服務運行該腳本。 – user53029
你確定你的sed命令在腳本里面工作嗎?在'-n'之後沒有引用部分的引用嗎?您是否嘗試用'bash -x'調試腳本? –