通过 SSH 执行时脚本不会返回

通过 SSH 执行时脚本不会返回

我通过 ssh 客户端调用脚本,如下所示:

ssh root@host "su - oracle -c '~/bin/weblogic start'"

~/bin/weblogic是一个 bash 脚本,实际上在后台启动 Web 服务器并读取和显示其日志,直到找到某种模式(“服务器状态更改为正在运行”),然后退出。当我从远程位置调用它时,它在执行最后一个 bash 命令后挂起。我确信这与 SO 中的解释有关(https://stackoverflow.com/questions/8122780/exiting-shell-script-with-background-processes);但是,我无法weblogic在后台启动 bash 脚本 - 我必须等待它完成并获取其退出代码以及常规标准输出直至特定模式。

bash代码是这样的:

   function start_server {
        ~/bin/weblogic.py
        echo 'Python script finished'
        exit 1
   }

   ....
   start_server

输出是

... server output ...
...
... Server state changed to RUNNING ....
Python script finished

如何让 SSH 客户端返回?我在 Solaris 11.3 上运行它。

答案1

exit 1发出错误状态信号。对于这样的脚本,您不应该exit在其中包含一个。

请尝试使用此功能。您可以在命令行上为 startManagedWeblogic.shm 提供主机和端口,也可以在启动服务器之前导出变量。如果您阅读了startManagedWebLogic.sh脚本,您应该找到一个可以在运行脚本之前导出的变量来重定向输出,而不是我使用的方法。您可以在 python 脚本中执行相同的操作。

WebLogic 启动脚本将一直运行,直到服务器停止。您需要将后台日志记录输出到文件并拒绝服务器。 (考虑使用nodeManager来启动服务器。)然后尾随文件直到它运行。

function start_server {
    ~/bin/startManagedWeblogic.sh HOSTNAME PORT &> weblogic.out &
    disown
    ~/bin/tailUntilRunning.py weblogic.out
    echo 'Shell script finished'

}

尽管您需要使用 wlst.sh 作为 python (Jython 2.1) 脚本的解释器,但您可以使用 WLST 函数来启动服务器。

相关内容