оператор сценария bash не завершается при запуске с удаленного узла - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть скрипт, который выполняет перезапуск приложения.его вариант 2 (и только 2) в случае, если оператор case не завершается в ;;опции при запуске с удаленного узла в следующем формате

ssh и @ ip /path/script.sh 2 01 05 2019

опция 1 и 3 работает.Вариант 1 не имеет оператора выхода, все еще выходящего из сценария после выполнения.для варианта 2 я вижу выполнение до последнего оператора echo.

скрипт выглядит следующим образом

source /geneva/app/phts1/.profile

e_name=`echo $HOME|cut -d "/" -f4`

ch=$1
dt=$2
mt=$3
yr=$4


case "$ch" in
  1)
    #..... some script .. working and exiting properly#
    ;;
  2)
    e_sid=`echo $ORACLE_SID`
    e_name=`echo $HOME|cut -d "/" -f4`


    x=12000000
    z=' '
    export GENEVA_FIXEDDATE=$yr$mt$dt$z$x
    process_id=`ps -fu $e_name|egrep 'TM|DConfigAgent'|tr -s " " " "|cut -d " " -f2`


     kill -9 $process_id  &
     cd $HOME/bin
     dconfigadmin -L platform.cfg ## custom application
     DConfigAgent & ## custom application
     sleep 1

     TM -u admin -p password -s $e_sid & ## custom application

     sleep 2
    # clear
     ls -lrt $HOME/log >>aaa.txt
     dt1=`cat aaa.txt|tail -1|tr -s " " " "|tr -s " " "\n" |tail -1`
     rm aaa.txt
     ls -lrt $HOME/log/$dt1>>aaa.txt
     dt2=`cat aaa.txt|tr -s " " " "|cut -d " " -f9|grep ^TM|tail -1`
     rm aaa.txt
     tail -100 $HOME/log/$dt1/$dt2

     echo "execution ends here ...... I can see till this echo statement being printed"
     ;;
  *)
            echo "wrong option"
            exit
            ;;

esac

1 Ответ

0 голосов
/ 28 февраля 2019

Ваш скрипт запускает фоновые задания:

kill -9 $process_id  &
DConfigAgent & ## custom application

Вы не перенаправили их ввод-вывод, поэтому сеанс ssh ожидает завершения этих команд.

Это не такПонятно, почему kill необходимо задокументировать, а другую команду можно задать так:

nohup DConfigAgent </dev/null >/dev/null 2>/dev/null &
...