作为devops的一部分,我正在构建一个工具来启动/停止与应用程序在同一服务器上托管的数据库。
在UI中,我正在发出启动和停止服务器的GET请求。
请求到来后,我使用Python subprocess
模块执行命令。
我能够成功停止并开始。但是,在'start'情况下,Python请求未完成,并且响应永远不会返回到浏览器。从浏览器点击GET请求会发生同样的情况;即使显示响应,它仍继续在浏览器选项卡上显示加载图标。
这是我的开始和停止代码:
两个多行变量:
shutdown_cmd="""
sqlplus '/ as sysdba' <<!
shutdown immediate;
!
"""
startup_cmd="""
sqlplus '/ as sysdba' <<!
startup;
exit;
!
"""
使用Python中的subprocess
执行上述命令的代码:
call(shutdown_cmd, shell = True)
call(startup_cmd, shell = True)
对于shutdown命令,执行以下代码并按如下方式完成请求:
SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
<machine_name>- - [10/Jan/2017 07:15:45] "GET /favicon.ico HTTP/1.1" 200 -
如果启动命令代码被执行并且请求按如下方式完成:
SQL> ORACLE instance started.
Total System Global Area 275615744 bytes
Fixed Size 2252384 bytes
Variable Size 218104224 bytes
Database Buffers 50331648 bytes
Redo Buffers 4927488 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
我看到关闭的差异是在请求完成时触发了一些favicon.ico
请求。对于启动,它会卡在最后一行,并且不会触发favicon.ico request
。
*
总结一下,当浏览器向python托管的HTTP发出GET请求时 服务器,如果返回oracle响应的shutdown命令, 但是如果启动命令oracle响应不返回 虽然命令是执行和数据库已启动,但服务器 继续等待回应。
*
有没有人有任何想法如何解决这个问题?