2014-09-05 47 views
2

我有这个问题在这里回答bash - running remote script from local machine关于如何使用与sudo有关的远程命令。我认为这是工作,因为我得到消息,我的服务器成功重新启动等,所以我选择了答案。但是今天我看到那台服务器实际上没有重启,但因为某种原因被杀。与sudo bash远程命令不起作用

事情我做了,当我跑这个命令第一次:

ssh [email protected] -t 'sudo /etc/init.d/script restart' #or -t just after ssh, same thing 

我得到这个消息:

Restarting openerp-server: Stopping openerp-server: openerp-server. 
Starting openerp-server: openerp-server. 
Connection to host.com closed. 

所以,是的,当时我以为一切都很好。但实际上会看到过程是否重新启动,我看到它没有工作。

当我试图(以相同的命令)再次重新启动,我得到这个消息:

Restarting openerp-server: Stopping openerp-server: start-stop-daemon: warning: failed to kill 25205: No such process 
openerp-server. 
Starting openerp-server: openerp-server. 
Connection to host.com closed. 

但是,如果使用相同的命令时,直接连接到远程服务器,一切正常,我的脚本重新启动服务器一般。 相同的命令我的意思是这样的:

ssh [email protected] 
sudo /etc/init.d/script restart 

那么到底什么是怎么回事?

回答

0

启动它的脚本看起来可能会做一些顽皮的事情,它会依赖于TTY在命令返回后暂时保持活跃状态​​。这可能是造成麻烦的直接退出。如果它启动了一个连接到TTY内的shell的后台作业,并在稍后分离,那么关闭连接可能会杀死该shell并杀死它中的作业。这就可以解释为什么当你重新启动时,脚本认为服务有一个进程号,但是却找不到它:可能进程号被记录在某个地方,但是在进程开始之前,进程会被关闭。

为了确认,您可以尝试几件事情。远程登录,运行sudo命令,然后立即退出:

ssh [email protected] 
sudo /etc/init.d/script restart; exit 

,看看这立即退出也碰到了同样的问题。

也可以尝试

ssh [email protected] -t 'sudo /etc/init.d/script restart; sleep 30' 

,迫使它等待一下,看看是否有任何地方让你。

+0

第一个选项确实正常运行。即使退出后它也会正常重启。但使用睡眠定时器的第二个选项解决了它。所以我猜想使用远程命令时,重新启动的过程需要比实际连接到服务器的时间更长。实际上,它甚至足以放置像1秒钟的东西,并且它正常重新启动 – Andrius 2014-09-05 09:00:18