Сценарий не возвращается при выполнении через SSH

Я вызываю скрипт через ssh-клиент следующим образом:

ssh root@host "su - oracle -c '~/bin/weblogic start'" 

~/bin/weblogic – это сценарий bash, который фактически запускает веб-сервер в фоновом режиме и читает и отображает его журнал до тех пор, пока не будет найден определенный шаблон («Состояние сервера изменено на RUNNING»), после чего он выйдет. Когда я вызываю его из удаленного места, он зависает после выполнения последней команды bash. Я уверен, что это имеет какое-то отношение к тому, что объясняется в SO ( https://stackoverflow.com/questions/8122780/exiting-shell-script-with-background-processes ), однако я не могу запустить weblogic bash script в фон – я должен дождаться его завершения и получить его код выхода вместе с регулярным stdout до определенного шаблона.

Код bash выглядит так:

  function start_server { ~/bin/weblogic.py echo 'Python script finished' exit 1 } .... start_server 

Выход

 ... server output ... ... ... Server state changed to RUNNING .... Python script finished 

Как я могу вернуть клиент SSH? Я запускаю это на Solaris 11.3.

exit 1 сигнализирует об ошибке. Для сценария, подобного этому, вы не должны включать туда exit .

Вместо этого попробуйте эту функцию. Вы можете предоставить хост и порт в командной строке для startManagedWeblogic.shm, или вы можете экспортировать переменные перед запуском сервера. Если вы прочитали скрипт startManagedWebLogic.sh, вы должны найти переменную, которую вы можете экспортировать, прежде чем запускать скрипт для перенаправления вывода вместо метода, который я использовал. Вы можете сделать то же самое в своем скрипте python.

Сценарии запуска WebLogic запускаются до тех пор, пока сервер не остановится. Вы захотите выполнить фоновый вывод журнала в файл и отключить сервер. (Рассмотрите возможность использования nodeManager для запуска сервера.) Затем запустите файл, пока вы его не запустите.

 function start_server { ~/bin/startManagedWeblogic.sh HOSTNAME PORT &> weblogic.out & disown ~/bin/tailUntilRunning.py weblogic.out echo 'Shell script finished' 

}

Существуют функции WLST, которые вы можете использовать для запуска сервера, хотя вам потребуется использовать wlst.sh в качестве интерпретатора для вашего скрипта python (Jython 2.1).