SSH не освобождает терминал - PullRequest
       29

SSH не освобождает терминал

0 голосов
/ 08 сентября 2010

Когда я запускаю следующую команду из моего macbook на моем сервере Ubuntu, терминал не освобождается. Он просто сидит там, пока я не управляю командой C-C.

ssh user@my-server 'sudo /etc/init.d/nginx start'

Когда я вхожу, а затем запускаю команду, все работает нормально.

ssh user@my-server
sudo /etc/init.d/nginx start

Вот вывод, освещающий проблему

~ $ ssh me@somewhere.com
me@somewhere.com's password:
Last login: Mon Sep  6 15:18:18 2010 from
me@somewhere:~$ sudo /etc/init.d/nginx restart
[sudo] password for me:
Restarting nginx daemon: nginx.
me@somewhere:~$ exit
logout
Connection to somewhere.com closed.
~ $ ssh me@somewhere.com 'sudo /etc/init.d/nginx restart'
me@somewhere.com's password:
[sudo] password for me:

Restarting nginx daemon: nginx.

После выполнения последней команды она просто остается там и ничего не делает. Заранее благодарим за любой совет, который вы могли бы получить.

me@somewhere:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.4 LTS"
me@somewhere:~$

Обновление:

Я думал, что в скрипте инициализации тоже может быть ошибка. С тех пор я использовал 3 разные версии сценария инициализации для niginx, и все 3 имели одну и ту же проблему. В настоящее время я запускаю этот скрипт, который, кажется, является выбором из 3, которые я нашел.

http://wiki.nginx.org/Nginx-init-ubuntu

Я только что попробовал команду, предложенную в комментариях, и проблема точно такая же. Есть еще идеи?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

ОК. Мне удалось исправить это путем принудительного выделения псевдо-tty. Просто добавьте опцию -t в команду SSH. Это устраняет проблему и позволяет увидеть вывод. Итак ...

ssh user@my-server 'sudo /etc/init.d/nginx start'

становится ...

ssh -t user@my-server 'sudo /etc/init.d/nginx start'

0 голосов
/ 10 сентября 2010

Короткая версия:

Давайте попробуем сделать это в 2 шага:

  1. Создать скрипт с вашей командой на вашем сервере
  2. Запуститьэтот скрипт с вашего ноутбука

Подробная версия

На вашем Ubuntu-скрипте создайте скрипт (скажем, / my / path / nginx-my-start.ш) с этим содержимым

sudo /etc/init.d/nginx start 1> / dev / null

Не забудьте дать ему права на выполнение (chmod+ x /my/path/nginx-my-start.sh)

Затем со своего ноутбука позвоните:

ssh user @ my-server / my / path / nginx-my-start.sh

Пояснения

У меня была точно такая же проблема с котом, которого я хотел запустить удаленно.Добавление перенаправления stdout '1> / dev / null' в сценарий сделало свою работу.

...