ДОЛЖНОСТНОЕ ЛИЦО SSH, не работающее для выполнения удаленную банку cmd

Что случилось:
Я вошел ssh root@ip nohup java -jar app.jar & выполнять банку на моем удаленном сервере (банка является сервером API).
Мой локальный сервер получает журналы банки вместо того, чтобы писать в nohup в удаленном сервере, и моя банка работает, но не работает.

Ожидаемый результат:
Способный к SSH EXEC выполненный nohup java -jar app.jar & от моей локальной системы.

Версия:
Ubuntu 18.04

обновление:
URL API банки возвращает вывод только, когда банка cmd выполняется через шпаклевку.
Для удаленного ssh должностного лица вывод URL API банки 404

обновление 1:
Все, в чем я нуждаюсь, выполняется банка в фоновом режиме в моем удаленном сервере (должностное лицо cmd от моей локальной системы).

1
задан 29 November 2019 в 12:32

2 ответа

nohup и консольные выводы...
точка должна перенаправить ouput к пустому указателю

ssh user@host "sh -c 'cd /working/dir; nohup command -options > /dev/null 2>&1 &'"
# invoking sh makes output redirections easyier

ssh root@ip "sh -c 'nohup /path/to/java -jar /path/to/app.jar > /dev/null 2>&1 &'"

, Конечно, произвести, может быть сохранен в файл

nohup some_command > output.log 2>&1 &

<час> РЕДАКТИРОВАНИЕ после комментариев
, X:expect Y:nohup
ожидает страницу справочника
[еще 119], информация об ожидает на Википедию

автоматизировать соединение через ssh, затем запускают программу и взаимодействуют (поскольку вывод дисплея регистрируется), expect мог добиться цели.

Установка expect на Вашей локальной машине

sudo apt-get install expect

Создает маленький сценарий, позволяет, называют его startItUp.sh и делают его исполняемым файлом

#!/usr/bin/expect -f
spawn ssh user@host

# Its not recommended to insert a password in a script
# a good practice will be to copy key with ssh_copy_id
#expect "password: "
#send "myP@sswOrd\r"

# once ssh connection is enabled, lets expect for prompt
expect "$ "
# i got the prompt, i send a command
send "cd /go/to/needed/dir \r"

# again
expect "$ "
send "java -jar app.jar \r"

# let me interact (for example, i'll be able to ctrl+c)
interact
1
ответ дан 7 December 2019 в 14:56

Интересная тема :)

Первый я думал, необходимо использовать одинарные кавычки для заключения в кавычки удаленной команды. Хорошее объяснение, об этой точке, дано [1 112] @pt314 в рамках принятого ответа вопроса , Как SSH может работать с если условие? Вот несущественная часть:

основная проблема состоит в том, что дважды заключенные в кавычки строки расширены Вашей локальной оболочкой...

, Но вероятно это - только часть проблемы. Таким образом, перед продолжением, скажем, немного слов о самом каноническом способе [1 114] nohup использование, которое мы можем найти в Интернете:

nohup comand -options arguments >/path/to/log 2>&1 &
|     |                         |             |    # run 'nohup' in the background
|     |                         |             # redirect stderror to stdout
|     |                         # redirect stdout of 'nohup', /dev/null when don't need it
|     # the command to be executed, its stdout/err will be appended to the nohop's stdout
# run the following command detached from the current shell

Согласно вышеупомянутому, выглядит, что Вам нужна команда как это:

ssh user@host 'nohup remote_command -optins arguments &' >/tmp/local.log

, Но, что на самом деле происходит здесь?

stdout (стандартный вывод) nohup присоединен к ssh сессии и выводу эти ssh, команда перенаправляется в файл, в рамках текущей сессии оболочки. Другими словами, удаленная команда присоединяется эй локальная сессия оболочки. Таким образом, если мы уничтожаем что-то на цепочке (ssh сессия или локальная оболочка), все перестало работать. По-видимому, в этом случае, нам не нужно nohup на удаленном сеансе вообще.

, Если мы идем один шаг вперед, мы можем прийти к заключению, что использование nohup на локальной стороне является хорошей идеей:

 nohup ssh user@host 'remote_command -optins arguments' >/tmp/local.log 2>&1 &

Это выглядит очень устойчивым, но выполнение удаленной команды все еще зависит от ssh сессии, инициируемой от локального компьютера, поэтому если, например, это будет перезагружено, то все перестанет работать снова.

<час>

я думаю, что существует много возможных способов достигнуть этого, Вы хотите более более безопасным способом. Вот одно предложение.

1. Позволяют нам использовать nohup в канонический путь для выполнения удаленной команды:

ssh user@host 'nohup remote_command -optins arguments >/tmp/remote.log 2>&1 &' 

2. Выборка удаленный журнал по ssh и записи локальный журнал в фоновом режиме:

nohup ssh user@host 'tail -n+1 -F /tmp/remote.log' >/tmp/local.log 2>&1 &

3. Монитор локальный файл журнала:

tail -F /tmp/local.log
0
ответ дан 7 December 2019 в 14:56

Другие вопросы по тегам:

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