如何从命令行停止OSGI应用程序

基督教

我确实有一个正在运行的osgi(equinox容器)应用程序。它将通过bash脚本启动。参见felix gogo shell

java -jar ... _osgi.jar -console 1234 &

这一切都很好,我也可以通过以下方式阻止它

telnet localhost 1234
<osgi>stop 0

但是我正在寻找的是如何将其嵌入到bash脚本中以停止osgi应用程序。

我已经尝试过了

echo stop 0 | telnet localhost 1234

但这不起作用。因此,如果有人知道如何将其放入bash脚本中,请告诉我。

尼尔·巴特利特

Telnet进入Gogo shell似乎是一个非常脆弱的解决方案。为什么不编写您的应用程序以支持标准POSIX信号处理?然后,您可以使用杀死它kill -s TERM <pid>

例如,以下捆绑软件激活器安装了一个关闭钩子,可以完全关闭框架,等效于stop 0

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.launch.Framework;

public class ShutdownHookActivator implements BundleActivator {

    @Override
    public void start(final BundleContext context) {
        Thread hook = new Thread() {
            @Override
            public void run() {
                System.out.println("Shutdown hook invoked, stopping OSGi Framework.");
                try {
                    Framework systemBundle = context.getBundle(0).adapt(Framework.class);
                    systemBundle.stop();
                    System.out.println("Waiting up to 2s for OSGi shutdown to complete...");
                    systemBundle.waitForStop(2000);
                } catch (Exception e) {
                    System.err.println("Failed to cleanly shutdown OSGi Framework: " + e.getMessage());
                    e.printStackTrace();
                }
            }
        };
        System.out.println("Installing shutdown hook.");
        Runtime.getRuntime().addShutdownHook(hook);
    }

    @Override
    public void stop(BundleContext context) throws Exception {
    }

}

注意:如果您控制着启动OSGi框架的启动器代码,则应该在此处安装关闭挂钩,而不是从单独的捆绑软件中安装。

更新资料

在bash中,该$!变量求值为上一次执行的后台命令的PID。您可以将其保存到自己的变量中以供以后参考,例如:

# Launch app:
java -jar ... &
MY_PID=$!

# Later when you want to stop your app:
kill $MY_PID

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从命令行停止Mule应用程序?

如何从命令行停止正在运行的应用程序

如何从命令行查找应用程序的路径?

我可以从命令行启动/停止特定的Web应用程序吗?

从命令行调用Wine安装的应用程序

Xubuntu从命令行设置首选应用程序

如何从命令行学习将在Unity的“系统设置”中启动应用程序的命令?

如何从命令行打开Windows应用商店应用程序?

如何从命令行停止Java程序的执行?

如何从命令行从iOS 8 Simulator中删除应用程序?

如何从命令行编译包括ANE在内的AIR iOS应用程序?

如何从命令行重新打开应用程序内弹出窗口?

如何从命令行调用嵌入式jre以便运行Java应用程序

如何从命令行运行.NET Core控制台应用程序

如何从命令行运行GUI应用程序?

如何从命令行向启动应用程序添加脚本?

如何从命令行构建和部署React-native应用程序?

如何从命令行导入django应用程序的模型?

如何从命令行重新启动IIS应用程序池?

如何从命令行使用默认应用程序打开文件?

如何部署从命令行运行的Javascript应用程序?

如何从命令行启动Google Crome应用程序?

如何从命令行构建Xamarin.Mac应用程序或构建脚本

如何从命令行脚本(或cron)启动Common Lisp GTK应用程序?

如何从命令行最小化应用程序窗口

如何从命令行向Unity Launcher添加/删除应用程序?

Python 3 - 如何从命令行应用程序中删除空行

如何从命令行运行 delphi VCL 应用程序

如何从命令行运行 MSIX 安装的应用程序