Я запускаю это:
ssh -t -vvv -i ~/.ssh/druid-keypair -o StrictHostKeyChecking=no ubuntu@${INSTANCE_ADDRESS} <<EOI
# Setup Oracle Java
...
# Install dependencies - mysql must be built from source, as the 12.04 apt-get hangs
export DEBIAN_FRONTEND=noninteractive
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd'
sudo apt-get -q -y -V --force-yes --reinstall install mysql-server-5.5
echo "ALL DONE with druid environment setup!"
exit
EOI
Примечание: я пробовал с и без -t в ssh.
Выходные данные отладки от -vvv:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
И тогда процесс просто сидит там навсегда. Почему команда ssh не заканчивается? Я пробовал с -t и без, и я пытался с выходом и без. Это не имеет значения :(
Обновление: когда я набираю 'jobs' в конце скрипта, я вижу:
JOBS:
[1]- Running nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null &
[2]+ Running nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null &
Как я могу запустить эти сервисы и все еще иметь сессию ssh, которая заканчивается?
Обновление: теперь я вручную отрекаюсь от этих процессов. Вещи все еще не выходят. WTF приятель?
Обновление: при выполнении построчно две команды не возвращаются в оболочку без нажатия CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Ответы:
Как правило, сеансы терминала SSH зависают, если все еще остаются открытые фоновые соединения. Под фоновыми связями я имею в виду такие вещи, как:
Посмотрите на соединения, которые все еще активны в вашем зависшем сеансе SSH, набрав
~#
в своем зависшем терминале SSH.Возможно, ваш сценарий открывает сеансы, которые вы не понимали. Либо в настройках терминала удаленной машины, таких как
.profile
(или.bashrc
и т. Д.), Может быть что-то, что устанавливает сеанс. Удачи в охоте!Кстати, некоторые другие escape-последовательности, предлагаемые клиентами OpenSSH, также могут быть полезны:
Еще одна вещь, если вы хотите, чтобы ваш SSH просто запускал ваши команды и немедленно выходил - то есть вы не хотите сеанс удаленного терминала - вы можете использовать эту
-f
опцию дляssh
. Это заставит соединение SSH быть фоновым заданием.источник
-f
работает для меня.background connection
и тем же, можетdisown
ли фоновый процесс не зависать?