2016-06-23 3 views
0

Я хотел написать сценарий оболочки для следующего: Я хочу проверить, запущена ли служба, если она запущена, а затем выйти 1, или через 5 минут ее не работать, выйти - 1. что-то вроде:Сценарий оболочки + зависимость времени

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: -

В вашем скрипте вы можете предоставить sleep 5m, чтобы подождать 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. 

Правильный путь к вашему решению будет: -

#!/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 работает, когда ps -ef | grep -v grep | grep "tomcat7" возвращает команду успеха код ошибки, для которых условие проходит. > /dev/null, чтобы подавить все стандартные outpur (stdout, stderr) до /dev/null, чтобы мы могли работать только с кодами выхода предоставленной команды.

+0

Сценарий должен проверяться через 5 минут (в идеале непрерывно в течение 5 минут) работает или нет, и если он начнет работать в течение 5 минут, выйдите из 1, и если это произойдет не работает в течение 5 минут, а затем выйдет -1 –

+0

Итак, вы хотите, чтобы он в цикле постоянно проводил опрос, чтобы проверить, работает ли служба каждые 5 минут непрерывно? – Inian

+0

Я хочу, чтобы это было в цикле, чтобы проверить, запущена ли служба, если это произойдет, то выйдите из 1. Цикл длится 5 минут. Если он не работает через 5 минут, цикл завершится и выйдет из -1. –

Смежные вопросы