O nome do meu processo é test
. Se eu usar
ps -ef | grep test
Vejo que o processo está em execução. Agora quero verificar isso a cada 10 minutos durante uma hora e imprimir com sucesso se estiver funcionando com sucesso por uma hora. Qual é a melhor forma de fazê-lo?
Responder1
Você pode usar um while
loop; aqui estou usando pgrep
para verificar se o processo está em execução:
#!/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
Substitua <process_name>
pelo nome real do processo que você deseja rastrear.
Responder2
Um loop simples em um script:
#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
sleep 10m
pgrep -f test &>- || exit
done
echo success
SECONDS
é uma variável especial no bash que contém o número de segundos desde que o script foi iniciado. pgrep test
verifica um processo chamado test
. Se não encontrar nenhum, saímos do script. Se não, nós sleep
por 10 minutos.
Se não saímos, pgrep
tivemos sucesso. Então, echo success
.