sudo в сценарии bash: не всегда ждет ввода пароля

#-----------------------------------------------------------------------
#!/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.

0
08.03.2019, 00:07
1 ответ

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
2
28.01.2020, 02:30

Теги

Похожие вопросы