2016-06-23 88 views
0

我想寫一個下面的shell腳本: 我想檢查一個服務是否正在運行,如果它正在運行,然後退出1,否則5分鐘後它不運行退出 - 1。 類似:Shell腳本+時間依賴關係

while(for 5 minutes) { 
if service running, exit 1 
} 
exit -1 //service is not running even after 5 minutes, so exit -1. 

我可以檢查,如果服務正在運行與否,但不能添加時間約束的部分條件。

這就是我試圖

if (($(ps -ef | grep -v grep | grep tomcat7 | wc -l) > 0)); 
then 
echo "running" 
else 
echo "NOT running" 
fi 
+0

發佈您嘗試到現在爲止 – syadav

回答

0

您應該使用bashsleep命令。摘自man頁面: -

您可以在腳本中提供以等待5分鐘並執行操作。

NAME 
     sleep - delay for a specified amount of time 

DESCRIPTION 
     Pause for NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. Unlike most implementations that require NUMBER be an 
     integer, here NUMBER may be an arbitrary floating point number. Given two or more arguments, pause for the amount of time specified by the sum of their values. 

一種合適的方式到你的解決辦法是: - 當ps -ef | grep -v grep | grep "tomcat7"返回該條件通過命令成功錯誤代碼

#!/bin/bash 
maxAttempts=0   
maxCounter=2  # Number of attempts can be controlled by this variable  

while [ "$maxAttempts" -lt "$maxCounter" ]; do 
    if ps -ef | grep -v grep | grep "tomcat7" > /dev/null 
    then 
     echo "tomcat7 service running, " 
     exit 1 
    else 
     maxAttempts=$((maxAttempts+1)) 
     sleep 5m       # The script waits for 5 minutes before exiting with error code '-1' 
    fi 
done 

exit -1 

if條件的作品。 > /dev/null將所有標準輸出(stdout,stderr)壓制爲/dev/null,以便我們只能使用所提供的命令的退出代碼。

+0

腳本也應該在5分鐘後檢查(理想情況下持續5分鐘)服務是否正在運行,如果它在5分鐘內開始運行,則退出1,如果它在5分鐘內不工作,然後退出-1 –

+0

因此,您希望在循環中持續輪詢以查看服務是否每5分鐘連續運行一次? – Inian

+0

我希望它在一個循環中檢查服務是否正在運行,如果它然後退出1.循環運行5分鐘。如果它在5分鐘內不工作,循環將結束並退出-1。 –