我已经在这里回答了这个问题 bash - running remote script from local machine关于如何在涉及 sudo 的情况下使用远程命令。我认为它在工作,因为我收到消息说我的服务器已成功重启等,所以我选择了答案。但是今天看到服务器居然不是重启,而是莫名其妙被kill了。
我第一次运行此命令时所做的事情:
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'
强制它稍等片刻,看看是否能带你到任何地方。
关于linux - 带有 sudo 的 bash 远程命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681863/