Я видел похожие вопросы, все решенные проблемы уже решены / не применимы.
У меня есть скрипт bash на удаленной машине, который запускает приложение Java. Соответствующие строки будут:
#!/usr/bin/env bash
...
java -cp /full/path/to/my.jar com.whatever.hi.wassup.MainClassThing \
--arg-1 /full/path/to/relevant_dir --arg-2 /full/path/to/another_dir &
...
echo started my app
exit 0
Я провел кучу тестов с небольшими скриптами, и у меня нет проблем. Я использую тот же подход для запуска другого Java-приложения, но у меня нет проблем (это серверное приложение с параметрами --daemon
, если это важно).
На локальной машине я пытаюсь вызвать удаленный скрипт внутри локального bash-скрипта следующим образом:
#!/usr/bin/env bash
...
ssh remote_host myRemoteScript
Все мои тесты и другое Java-приложение возвращают локальное приглашение. Проблема в том, что это, однако, действительно запускает удаленное Java-приложение и идет до последней строки, выводя «запустил мое приложение», но скрипт останавливается, у меня нет локальной подсказки, если только я не Ctrl+C
.
Используя ssh -v
в рабочем приложении Java, я получаю это:
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2992, received 7060 bytes, in 24.4 seconds
Bytes per second: sent 122.6, received 289.2
debug1: Exit status 0
Еще в нерабочем приложении я получаю это:
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
"started my app"
Но нет локальной подсказки. Я попытался запустить одну и ту же команду с nohup
и disown
, те же результаты. Как видно, команда имеет &
в конце. Комментирование только этой строки в удаленном скрипте работает без проблем (и ничего не делает полезного), поэтому я предполагаю, что это как-то связано с самим приложением Java - но разве управление процессом не доходит до оболочки? Запуск myRemoteScript на удаленном компьютере также работает должным образом.
Это логин без пароля. Обе машины RHEL 7.2.
EDIT
Также пробовал:
ssh remote_host "myRemoteScript"
ssh -T remote_host myRemoteScript
ssh remote_host "bash -c myRemoteScript"
ssh remote_host "myRemoteScript; exit"