Как узнать, запущен ли определенный процесс в течение 1 часа в оболочке

Как узнать, запущен ли определенный процесс в течение 1 часа в оболочке

Имя моего процесса 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.

Связанный контент