inturnがnohupを使用して他のschellスクリプトを呼び出すシェルスクリプトを作成しました。スクリプトが正常に終了した後も、私が書いたカスタムスクリプトのためにLinuxプロセスが実行されています。予想通りstartAllComponents.sh実行成功後のシェルスクリプトの終了処理
start_Server()
{
SERVER_HOME=${1}
NOHUP_LOG_FILE=${2}
logmsg "Starting the server"
/usr/bin/nohup `${SERVER_HOME}/bin/server.sh >> ${NOHUP_LOG_FILE} 2>&1 ` &
sleep 5
PID=`ps -ef|grep ${SERVER_HOME}/jvm |grep -v grep| awk '{print $2}'`
if [ "${PID}" = "" ]
then
logmsg "Couldn't get the PID after starting the server"
else
logmsg "****** Server started with PID: ${PID} ****** "
fi
}
logmsg()
{
echo "`date '+%b %e %T'` : $1"$'\n' >> /tmp/STARTUP`date '+%Y%m%d'`_.log
}
#### Send an email #####
sendEmail()
{
RECIPIENTS="[email protected]"
SMTP="1.1.1.1:25"
mailx -s "$SUBJECT" -S "smtp=smtp://$SMTP" $RECIPIENTS < /tmp/STARTUP`date '+%Y%m%d'`_.log
}
##### Main #####
INTS[0]="/opt/server/inst01;/home/gut1kor/nohup.inst01.out"
INTS[1]="/opt/server/inst02;/home/gut1kor/nohup.inst02.out"
INTS[2]="/opt/server/inst03;/home/gut1kor/nohup.inst03.out"
echo "##### Bringing up servers on `hostname`. #####"$'\n' > /tmp/STARTUP`date '+%Y%m%d'`_.log
IS_TOTAL=${#INTS[@]}
logmsg "Total Servers are: ${IS_TOTAL}"
if [ "$IS_TOTAL" -gt "0" ]
then
for((i=0;i<IS_TOTAL;i++)) do
IFS=";" read -a arr <<< "${INTS[$i]}"
start_Server ${arr[0]} ${arr[1]}
done
fi
sendEmail
の
内容は、スクリプトがサーバーインスタンスをアップbringinで動作しますが、実行した後、私は、各インスタンスに対して実行中のスクリプトのための2つのプロセスを参照してください。
[[email protected] startAll]$ ps -ef|grep startAllComponents.sh
gut1kor 63699 1 0 18:44 pts/2 00:00:00 /bin/sh ./startAllComponents.sh
gut1kor 63700 63699 0 18:44 pts/2 00:00:00 /bin/sh ./startAllComponents.sh
gut1kor 63889 61027 0 18:45 pts/2 00:00:00 grep startAllComponents.sh
スクリプト実行後もこれらのプロセスがまだ存在するのはなぜですか?スクリプトにどのような変更を加える必要がありますか?
最初にトップレベルスクリプトを実行していますか? –
"nohupユーザがログオフした後もコマンドを実行し続けるコマンドはフォアグラウンドプロセスとして実行され、&が続く場合を除き、スクリプト内でnohupを使用する場合は、オーファンまたはゾンビプロセスの作成を避けるためにwaitと組み合わせてください。 – jgr208