使用sudo的bash远程命令不起作用

时间:2014-09-05 08:43:27

标签: linux bash shell

我已经在这里回答了这个问题bash - running remote script from local machine关于如何使用涉及sudo的远程命令。我认为它有效,因为我收到消息说我的服务器已成功重启等,所以我选择了答案。但是今天我看到服务器实际上没有重启,但出于某种原因被杀死了。

我第一次运行此命令时所做的事情:

ssh user@host.com -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 user@host.com
sudo /etc/init.d/script restart

那到底是怎么回事?

1 个答案:

答案 0 :(得分:0)

启动它的脚本似乎正在做一些顽皮的事情,它依赖于在命令返回后暂时保持活跃的TTY。这可能是造成麻烦的直接退出。如果它启动了附加到TTY内部的shell的后台作业,并在之后不久分离,则关闭连接可能会终止shell并终止其中的作业。这可以解释为什么当你重新启动时,脚本会认为该服务有一个进程号,但后来无法找到它:可能是进程号被记录到某个地方,但是之后进程被杀掉了可以开始了。

要确认,您可以尝试一些事情。远程登录,运行sudo命令,然后立即退出:

ssh user@host.com
sudo /etc/init.d/script restart; exit

并查看此立即退出是否也会遇到同样的问题。

也可以尝试

ssh user@host.com -t 'sudo /etc/init.d/script restart; sleep 30'

迫使它等待一下,看看是否能让你随处可见。