如何在Raspbian Buster Lite中使用systemd启动服务,该服务启动felix(OSGi)程序并使捆绑包保持活动状态?

问题描述 投票:-1回答:1

我有以下问题:我有一个带有Raspbian Buster Lite操作系统的Raspberry Pi。我想从Raspberry Pi的启动处自动启动程序。

我正在通过在/ etc / systemd / system文件夹中创建服务来对systemd进行尝试。我要启动的程序是一个Apache Felix文件,用于启动OSGi-Bundles。如果我在Raspberry Pi上启动此文件,则一切正常。通过使用systemd启动程序,该服务处于活动状态,但是在启动每个捆绑包之后,Felix文件的捆绑包将立即停止。我希望捆绑包保持活动状态。我尝试了很多事情,这里有一个例子:

[Unit]
Description=Service to run felix

[Service]
User=module
Group=module
Type=simple
WorkingDirectory=/home/module/apache-felix-6.0.2/apache-felix-6.0.2
ExecStart=/home/module/apache-felix-6.0.2/apache-felix-6.0.2/startFelix.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

使用此方法,如上所述,服务处于活动状态,但是捆绑包在成功启动后全部停止。我也尝试了用fork和RemainAfterExit = yes。还是一样的问题。经过研究,我发现使用服务类型oneshot和RemainAfterExit = yes,服务在启动后仍然保持活动状态。但这并不能解决问题,因为尽管服务仍处于活动状态,但Felix文件的捆绑软件已停止。我还尝试将KillMode设置为none,将KillSignal设置为信号,谁的默认操作是忽略该信号,但它也不起作用。我将KillSignal设置为SIGCHLD。

这里是startFelix.sh脚本:

#!/bin/bash

java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8182 -Dlogback.configurationFile=conf/logback.xml -jar ./bin/felix.jar

如何保持捆绑包有效?有人知道吗?

ubuntu raspberry-pi osgi systemd apache-felix
1个回答
0
投票

您说

每个捆绑包启动后立即停止

我不确定您的意思是什么!您怎么知道它们先启动然后停止?

如果捆绑包处于installed状态,则可能是它们无法解析。这可能是由于对给定的OS,Java版本,体系结构等的要求。

如果您的捆绑包处于resolved状态,则它们可以解决但不能启动。例如,可能是因为Framework Bundle Cache的状态错误。也可能是激活器中引发了异常。

根据您提供的信息确实很难说。我将执行以下操作:

  1. 确保一切都在开发者友好的环境中工作
  2. 手动安装在Raspberry Pi上并手动运行(确保还安装了GogoShell,以便您可以检查运行时)并检查所有工作正常。
  3. 添加systemd脚本,如果只有这样,则您需要将状态与上一步进行比较。
© www.soinside.com 2019 - 2024. All rights reserved.