Скрипт Bash для мониторинга процесса и sendmail в случае неудачи

Я понимаю, что не могу рассчитывать на ps | grep или варианты, чтобы точно сказать мне, что PID запущен. Однако я знаю, что мне нужно на время, пока эта проблема не будет решена в следующем выпуске.

У меня есть процесс с именем Foo, который является родительским, TEST1 и TEST2 являются дочерними процессами. Если TEST1 и / или TEST2 отключатся, Foo продолжит работу и не возродит TEST1 и / или TEST2, которые необходимы для правильной работы. Как я знаю это, потому что программа для перезапуска TEST1 и / или TEST2 требует, чтобы Foo сначала был перезапущен.

Поэтому, когда я хочу отслеживать дочерний процесс, если произошел сбой отправления почты, если он не прошел, перезапустите службу и отправьте еще одно электронное письмо, чтобы он снова запустился. Я планирую запускать скрипт через CRON каждые 5 минут.

Проверка работает независимо, как и sendmail. Проблема в том, когда я создаю оператор if else. Когда TEST1 или TEST2 умирает, он все еще регистрирует, что он работает, когда это не так. Может кто-нибудь помочь мне в этом, пожалуйста.

#!/bin/bash
#Check if process is running
VAL1=`/usr/ucb/ps aux | grep "[P]ROCESS TEST1" >/dev/null`
VAL2=`/usr/ucb/ps aux | grep "[P]ROCESS TEST2" >/dev/null`
if $VAL1 && $VAL2; then
echo "$(date) - $VAL1 & $VAL2 is Running" >> /var/tmp/Log.txt;
else
SUBJ="Process has stopped"
FROM="Server"
TO="[email protected]"
(
cat << !
To : ${TO}
From : ${FROM}
Subject : ${SUBJ}
!
cat << !
The $VAL1 and $VAL2 went down at $(date) please login to the server to restart
!
) | sendmail -v ${TO}
elseif
/usr/sbin/svcadm disable Foo;
wait 10;
/usr/sbin/svcadm enable Foo; 
fi

Ответы на вопрос(2)

Ваш ответ на вопрос