#-----------------------------------------------------------------------
#!/bin/ksh
hos=$(hostname)
curr_Dt=$(date +"%Y-%m-%d %H:%M:%S")
# I am going to get the process ID for the MSTRSvr.
ProcessPID=$(ps -ef | grep -i '[/]MSTRSvr' | grep -v grep | awk '{print $2}')
if [[ -z ${ProcessPID} ]]; then
# There is no PID, Not running!
echo "ALERT TIME : $curr_Dt" >>wa.txt
echo "SERVER NAME : $hos" >>wa.txt
echo "\n \n" >>wa.txt
echo " MSTRSvr is not running on $hos Please check for possible impact " >>wa.txt
echo "\n \n" >>wa.txt
mail -s "MSTRSvr process ALERT" abc@aaa.com <wa.txt
else
# The process is running check it against the last recorded PID.
# You can also compare /tmp/MSTRSvr.pid with ${ProcessPID}.
kill -0 `cat /tmp/MSTRSvr.pid` > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
# The current PID does not match.
echo "MSTRSvr was restarted." >>mi.txt
# Update the tempfile with current running PID.
echo ${ProcessPID}>/tmp/MSTRSvr.pid
mail -s "MSTRSvr process ALERT" abc@aaa.com <mi.txt
fi
fi
rm wa.txt 2>ni.txt
rm mi.txt 2>ni.txt
#---------------------------------------------------------------------
Перед первым запуском этого скрипта , создайте файл /tmp/MSTRSvr.pid и добавьте в него «999999999» (случайное число). Проверка под командой «else» завершится ошибкой, и вы получите электронное письмо с сообщением «MSTRSvr был перезапущен», игнорируйте это и продолжайте ...
Таким образом, каждый интервальный сценарий будет проверять PID, а затем сравнивать его с последним известным PID.
Sudo достаточно один раз, просто запустите wrapper.sh
с помощью sudo. Проверьте, есть ли у вас root-права в скрипте, больше не нужны вызовы sudo.
sudo./wrapper.sh
обертка.sh:
#!/usr/bin/env bash
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fi
./some_other_script_01
./some_other_script_02