Ubuntu SSH不释放终端

Ubuntu SSH不释放终端,ubuntu,ssh,capistrano,Ubuntu,Ssh,Capistrano,当我从macbook向ubuntu服务器运行以下命令时,终端不会被释放。它就在那里,直到我控制命令 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 S

当我从macbook向ubuntu服务器运行以下命令时,终端不会被释放。它就在那里,直到我控制命令

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:~$
更新: 我认为init脚本可能也有一个bug。此后,我为niginx使用了3个不同版本的init脚本,所有3个版本都有相同的问题。我目前正在运行这个脚本,它似乎是我找到的3个脚本中的一个


我只是尝试了评论中建议的命令,问题完全相同。还有其他想法吗?

好的,我通过强制执行伪tty分配来解决这个问题。只需将-t选项添加到SSH命令中。这解决了问题,仍然允许您查看输出。所以

sshuser@my-服务器“sudo/etc/init.d/nginx start”

变成


ssh-tuser@my-服务器“sudo/etc/init.d/nginx start”
短版本:

让我们分两步进行尝试:

  • 使用您的脚本创建脚本 服务器上的命令
  • 从笔记本电脑启动该脚本
  • 详细版本

    在你的ubuntu框中,用这个内容创建一个脚本(比如/my/path/nginx my start.sh)

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

    别忘了给它执行权限(chmod+x/my/path/nginx my start.sh)

    然后从笔记本电脑上拨打:

    sshuser@my-server/my/path/nginx-my-start.sh

    解释


    我想远程启动的tomcat也有同样的问题。在脚本中添加stdout重定向“1>/dev/null”完成了任务。

    似乎是nginx启动脚本中的一个bug。当sshing然后发出sh-c“sudo/etc/init.d/nginx restart”时,它能工作吗?