繁体   English   中英

带有sudo的bash远程命令不起作用

[英]bash remote command with sudo does not work

我已经在这里回答了这个问题bash-从本地计算机运行远程脚本,脚本说明我如何在涉及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

那么,这里到底发生了什么?

似乎启动它的脚本正在执行一些顽皮的操作,该操作依赖于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'

迫使它稍等一下,看看是否可以带您到任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM