0

Jetty 9 安装在 EC2 linux 服务器上,jetty.sh 被复制到 /etc/init.d 并在 /etc/rc1.d、/etc/rc2.d 建立了正确的链接。

我正在使用 SSH 连接到实例,并运行 jetty 通过sudo service jetty start 它正确加载服务,即使在注销 SSH 会话之后也是如此。

但是,ssh -t -i key.pem ec2-user@instance.domain.com 'sudo service jetty restart'在我的实例上运行远程 SSH 命令时,它会启动,但之后会立即停止。这是日志:

2013-11-14 18:03:01 main DispatcherServlet [INFO] FrameworkServlet 'restapi': initialization completed in 1376 ms
2013-11-14 18:03:01.824:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@67fc3482{/,file:/usr/share/jetty/jetty-distribution-9.0.6.v20130930/webapps/ROOT/,AVAILABLE}{/ROOT}
2013-11-14 18:03:01.941:INFO:oejs.ServerConnector:main: Started ServerConnector@10614f3d{HTTP/1.1}{0.0.0.0:8080}2013-11-14 18:03:02.226:INFO:oejs.ServerConnector:main: Started ServerConnector@666c1838{SSL-http/1.1}{0.0.0.0:8443}2013-11-14 18:03:05.670:INFO:oejs.ServerConnector:Thread-3: Stopped ServerConnector@10614f3d{HTTP/1.1}{0.0.0.0:8080}
2013-11-14 18:03:05.671:INFO:oejs.ServerConnector:Thread-3: Stopped ServerConnector@666c1838{SSL-http/1.1}{0.0.0.0:8443}

我试过远程执行sudo nohup service jetty restart &,同样的结果。

如何远程重启(SSH)并保持运行?

4

6 回答 6

2

我在 CentOS(基于 RPM)上复制了你的问题,它就像一个魅力。我安装了码头并将其配置在端口 7070 上。

停止码头:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo service jetty stop'
Stopping Jetty: OK
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

7070 端口没有监听:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo netstat -anp | grep 7070'
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

出发码头:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo service jetty start'
Starting Jetty: . OK Thu Nov 14 08:57:19 EST 2013
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

端口 7070 正在使用中:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo netstat -anp | grep 7070'
tcp        0      0 :::7070                     :::*                        LISTEN      2431/java           
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

以下是相应的日志:

2013-11-14 08:57:15.610:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@1c9c8aa{/oldContextPath,null,AVAILABLE}
2013-11-14 08:57:16.283:INFO:oejs.ServerConnector:main: Started ServerConnector@176982e{HTTP/1.1}{0.0.0.0:7070}
2013-11-14 08:57:16.392:INFO:oejs.ServerConnector:main: Started ServerConnector@166320b{SSL-http/1.1}{0.0.0.0:8443}

这是我使用的平台:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo lsb_release -a'
LSB Version:    :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.3 (Final)
Release:    6.3
Codename:   Final
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

最后,这里是 hterestart命令:

# ssh -t -i key.pem ec2-user@ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 'sudo service jetty restart'
Stopping Jetty: OK
Starting Jetty: . OK Thu Nov 14 09:13:00 EST 2013
Connection to ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com closed.

我通过运行上述所有命令sudo以确保 sudo 不是问题。

  • 您的实例是否有任何更改?
  • 您过去是否能够通过 SSH n sudo 成功启动码头?如果是,那么从那以后发生了什么变化?
  • 如果这是新安装,则启动一个新实例并检查您是否仍然面临同样的问题。

顺便说一句,我不是 java 人,并按照这些说明安装了 jetty 9。

于 2013-11-14T14:12:19.003 回答
1

我认为 init 脚本在 Jetty 完全启动之前终止,因此在脚本终止后的几秒钟内它仍然需要 shell。
你试一试:

ssh -t -i key.pem ec2-user@instance.domain.com 'sh -c "sudo service jetty restart;sleep 8"'

同样,您可以尝试从脚本重定向输入

ssh -t -i key.pem ec2-user@instance.domain.com <<'FIN'
#commands to run on remote host
/bin/bash --login -i -s << FAIM
su -l -s /bin/bash << FEIN
your_password
nohup service jetty restart &
bg
disown -a
sleep 20
FEIN
sleep 5
FAIM
FIN

另一种选择是请求红帽支持,因为您使用亚马逊云服务付费。

于 2013-11-15T18:05:31.680 回答
1

尝试使用以下命令重定向 I/O:

ssh -t -i key.pem ec2-user@instance.domain.com 'sudo service jetty restart </dev/null >/dev/null 2>/dev/null'

如果有帮助,您可以只尝试 >/dev/null。

于 2013-11-17T12:06:53.933 回答
1

工作解决方案:

  1. 在 EC2 实例上,使用您想要的内容编辑 sudoers 文件。
  2. 然后,使用以下命令远程重启 Jetty:ssh -i key.pem ec2-user@instance.domain.com 'sudo service jetty restart',注意 -t 已被删除。
  3. 如果重启完成后命令提示符没有返回,请在末尾添加 >/dev/null。
于 2013-11-22T23:05:48.397 回答
0

试试这个,使用 -f 强制 ssh 进入后台:

 ssh -f -t -i key.pem ec2-user@instance.domain.com 'sudo service jetty restart' 
于 2013-11-13T00:46:10.247 回答
0

从我上面的评论来看,这行得通吗:

ssh -t -i key.pem ec2-user@instance.example.com "sudo su - -c 'service jetty start'"

?

于 2013-11-13T08:06:36.590 回答