Проверять конкретный процесс в цикле каждые 5 минут в течение 30 минут - PullRequest
0 голосов
/ 03 октября 2019

Здравствуйте, у меня есть требование, когда во время первоначального предоставления сервера я должен выполнить этот сценарий оболочки. Мне нужно проверять агент (ps -ef | grep agent) каждые 5 минут. Если агент установлен, мне нужно запустить /home/usr/job.ksh и выйти из сценария. Если агент не установлен в течение 30 минут, мне нужно поставить сообщение «Агент не установлен» и выйти.

Пожалуйста, помогите в логике для этого сценария оболочки.

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Вы можете попробовать это:

#!/bin/bash
for _ in {1..180}; do
    if pgrep agent &>/dev/null; then
        /home/usr/job.ksh
        exit
    fi
    sleep 10
done
echo "agent not intalled"

Выполните цикл 180 раз и проверьте, работает ли агент. Между проверками дремлю 10 секунд.

0 голосов
/ 03 октября 2019

Вы можете сделать что-то вроде этого:

for _ in {1..6}                         # Run loop for 6 times (6*300=1800s ~ 30min)
do
    if [ $(ps -ef|grep agent|egrep -v grep|wc -l) -ge 1 ]
    then
        /home/usr/job.ksh
        exit 0
    else
        sleep 300                       # Sleep for 5min
    fi
done
echo "agent not installed"
exit 1
0 голосов
/ 03 октября 2019

Может быть, вы видите команду 'flock'?

flock -w10 /var/tmp/job.lock /home/usr/job.ksh

-w10 - 10 секунд ожидания перед запуском запуска, если он не запущен (при необходимости измените на 30 минут)

И добавьте этоСтрока в / etc / crontab за каждые 5 минут:

*/5 * * * * root /bin/ksh /home/usr/job.ksh
...