Имя моего процесса test
. Если я использую
ps -ef | grep test
Я вижу, что процесс запущен. Теперь я хочу проверять это каждые 10 минут в течение часа и печатать сообщение об успешном выполнении, если он успешно выполняется в течение часа. Как лучше всего это сделать?
решение1
Вы можете использовать while
цикл; здесь я использую его pgrep
для проверки того, запущен ли процесс:
#!/bin/bash
counter=0
while :; do
[ "$counter" -eq 6 ] && break
if pgrep <process_name> &>/dev/null; then
echo "Success !!"
(( counter += 1 ))
sleep 10m
else
echo "Process not running..exiting !!"
break
fi
done
Замените <process_name>
фактическим названием процесса, который вы хотите отслеживать.
решение2
Простой цикл в скрипте:
#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
sleep 10m
pgrep -f test &>- || exit
done
echo success
SECONDS
— это специальная переменная в bash, которая содержит количество секунд с момента запуска скрипта. pgrep test
проверяет наличие процесса с именем test
. Если он его не находит, мы выходим из скрипта. Если нет, мы sleep
на 10 минут.
Если мы не вышли, то это pgrep
было успешно. Итак, echo success
.