2013-10-07 84 views
0

我是新的Shellscript,我收到一些問題。我需要一個腳本來檢查服務是否正在運行,如果它沒有運行,並且不存在該標誌,則啓動所有服務。我做錯了什麼?Shellscript - 檢查運行服務

#!/bin/bash 

file= "$PIN_HOME/apps/DE_BILL_MI_BRM/alarmistica/flags/intervencao.flag" 

# Check if services are running 
for service in $BRM_SERVICES 
do 
    if [ps -ef | grep $service | grep -v grep | awk 'NR>1{for (i=1;i<=NF;i++)if($i==1) print "Services not running", i}' ]; then 
     echo $service " is not running correctly" 
    else 
     if [ -f "$file" ]; then 
      echo "Flag exists. The service will not start" 
     else 
      echo "$file not found. Starting all services" 
      pin_ctl start all 
     fi  
    fi 
done 

($i==1),服務沒有運行!

但結果並不對應。例如,當服務關閉時,腳本不會啓動服務...

+0

什麼是'$ i'?另外,你是否定義了'$ BRM_SERVICES'?不在此代碼中。 – Hogan

+0

你爲什麼不使用'pidof $ service'或'ps -C $ service'? –

+0

至少,你有兩個間距錯誤:'file =「$ PIN ...」和'如果[ps -ef ...'是必需的。 – chepner

回答

0

對於檢查進程表,請改爲使用pgrep

#!/bin/bash 

file= "$PIN_HOME/apps/DE_BILL_MI_BRM/alarmistica/flags/intervencao.flag" 

# Check if services are running 
for service in $BRM_SERVICES 
do 
    pgrep -f "$service"; 
    exstat=$?; # This checks the exit status 
    if [ "$exstat" -eq 0 ] && ! [ -f "$file" ]; then 
     echo "pgrep returned exit status $extstat"; 
    else 
     echo "$file not found. Starting all services" 
     pin_ctl start all 
    fi  
done 
+0

$ BRM_SERVICES是一個變量,包含所有的服務:) – user2855299

+0

不知道我明白...當你做'echo $ BRM_SERVICE'時變量輸出是什麼 – iamauser

相關問題