在 Ubuntu 16.04 上运行 Wildfly 9.0.2 在使用 Ubuntu 14.04 LTS 之后,我切换到了 systemd。我抓住了 Wildfly 10 (contrib) 的脚本。我有一个persistence.xml
<property name="hibernate.search.default.directory_provider" value="filesystem"/>
<property name="hibernate.search.default.indexBase" value="/var/lucene/indexes"/>
现在,使用旧的 init.d 脚本运行,或者从 Standalone.sh 开始,索引工作,但是当从 systemd-script 和 systemctl 开始时,lucene 更喜欢使用 / 作为 indexBase,因此它不能写入指数。
Caused by: org.hibernate.search.SearchException: HSEARCH000103: Unable to initialize IndexManager
Caused by: org.hibernate.search.SearchException: Cannot write into index directory: /. for index
我真的看不到任何相关的差异,用于启动 wildfly 的实际命令似乎仅在 systemd 添加的情况下有所不同-c standalone.xml -b 0.0.0.0
,而且由 systemd 启动的进程似乎使用我在 /opt/wildfly 作为 JBOSS_HOME 独立时放入的符号链接。 sh 使用实际的安装目录。
有谁知道如何使用 systemd 开始 wildfly 并仍然使用 persistence.xml 中的 indexBase?
编辑:将 wildfly.service 中的 ExecStart 更改为
ExecStart=/home/wildfly/wildfly-9.0.2.Final/bin/standalone.sh -Dhibernate.search.default.indexBase=/var/lucene/indexes
解决了问题,但留下了问题;为什么不使用persistence.xml 的值?我没有回答这个问题,因为这个决议没有回答为什么。
我使用的脚本交付在wildfly-10.0.0.Final/docs/contrib/scripts/systemd
首先将 launch.sh 复制到 wildfly 的 bin 目录中。:
#!/bin/sh
if [ "x$WILDFLY_HOME" = "x" ]; then
WILDFLY_HOME="/opt/wildfly"
fi
if [[ "$1" == "domain" ]]; then
$WILDFLY_HOME/bin/domain.sh -c $2 -b $3
else
$WILDFLY_HOME/bin/standalone.sh -c $2 -b $3
fi
下一个 wildfly.conf 被复制到 /etc/wildfly/wildfly.conf
# The configuration you want to run
WILDFLY_CONFIG=standalone.xml
# The mode you want to run
WILDFLY_MODE=standalone
# The address to bind to
WILDFLY_BIND=0.0.0.0
最后是 /etc/systemd/system/wildfly.service 中的 wildfly.service
[Unit]
Description=The WildFly Application Server
After=syslog.target network.target
Before=httpd.service
[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=-/etc/wildfly/wildfly.conf
User=wildfly
LimitNOFILE=102642
PIDFile=/var/run/wildfly/wildfly.pid
ExecStart=/opt/wildfly/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG \
$WILDFLY_BIND
StandardOutput=null
[Install]
WantedBy=multi-user.target
Wildfly 安装在 /home/wildfly/wildfly-9.0.2.Final 中,而 /opt/wildfly 是指向实际安装的符号链接。将链接交换为 systemd 文件中的实际路径似乎没有什么区别。
当我注释掉 wildfly.conf 中的内容并像这样编辑 wildfly.service 时,Lucene 工作并使用正确的目录作为索引:
# ExecStart=/home/wildfly/wildfly-9.0.2.Final/bin/launch.sh \
# $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
ExecStart=/home/wildfly/wildfly-9.0.2.Final/bin/standalone.sh \
-Dhibernate.search.default.indexBase=/var/lucene/indexes