我有一个arch linux安装程序,并通过arch用户存储库(yaourt -S neo4j)安装了neo4j,我可以运行web控制台fine(sudo neo4j console,具有正常的输出和完整的功能),但是当尝试启动服务器(sudo neo4j start)时,我遇到以下错误消息:/usr/share/neo4j/bin/utils: line 345: [: -lt: unary operator expected
Using additional JVM arguments: -server -XX:+DisableExplicitGC -Dorg.neo4j.server.properties=/etc/neo4j/neo4j-server.properties -Djava.util.logging.config.file=/etc/neo4j/logging.properties -Dlog4j.configuration=file:/etc/neo4j/log4j.properties -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
Starting Neo4j Server...cat: /run/neo4j/neo4j-service.pid: No such file or directory
process []... waiting for server to be ready. Failed to start within 120 seconds.
Neo4j Server may have failed to start, please check the logs.
rm: cannot remove ‘/run/neo4j/neo4j-service.pid’: No such file or directory
在打印错误消息之前没有任何延迟,因此它似乎是超时之外的事情。我对NEO4J还比较陌生(我使用Web控制台完成了相当多的用户手册,但没有开发或服务器配置经验),所以我不确定还有什么可能与之相关。我试图查看utils脚本,但错误似乎是它试图启动服务器的地方,但它似乎也在继续尝试启动服务器。我还尝试更改它启动的端口,如this question中所示,但没有更改。我唯一能找到的日志就是一次又一次的记录(有适当的时间戳):
Oct 15, 2014 1:33:49 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM'
任何帮助都将不胜感激!
编辑:
它失败的第345行是这段代码的结尾:
if [ $UID == 0 ] ; then
OPEN_FILES=`su $NEO4J_USER -c "ulimit -n"`
else
OPEN_FILES=`ulimit -n`
fi
if [ $OPEN_FILES -lt 40000 ]; then
从做一些Echo调试来看,su neo4j似乎失败了,可能是因为$neo4j_user被设置为neo4j,一个在我的系统上不存在的用户。我尝试将其设置为某个配置文件的根目录,但显然这不正常工作。对我来说,arch是一种持续的学习体验,但我以前不需要添加新用户来让软件工作。
最佳答案:
有趣的是:/usr/share/neo4j/bin/utils: line 345: [: -lt: unary operator expected
我假设这是由NEO4J用户的错误默认shell引起的。当前为系统用户设置了什么默认值?试着把它换成bash。启动脚本应该可以很好地与bash配合使用。