Что случилось:
Я вошел 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 от моей локальной системы).
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 &
<час> РЕДАКТИРОВАНИЕ после комментариев
автоматизировать соединение через 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 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