[英]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.