【问题标题】:ElasticSearch Error "/System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes/0" "write" on Mac 10.15Mac 10.15 上的 ElasticSearch 错误“/System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes/0”“写入”
【发布时间】:2019-11-06 02:51:35
【问题描述】:

我正在尝试在 Mac OS X 10.15 Catalina 上启动 elasticSearch 6.8,但它显示错误。我已经为 System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes/0 文件夹授予了 777 权限。

  • 弹性搜索 6.8
  • OpenJDK 12

    [2019-06-24T15:12:32,803][WARN][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] 线程 [main] 中未捕获的异常 org.elasticsearch.bootstrap.StartupException:java.security.AccessControlException:访问被拒绝(“java.io.FilePermission”“/System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes/0”“write”) 在 org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.8.1.jar:6.8.1] 在 org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.8.1.jar:6.8.1] 引起:java.security.AccessControlException:访问被拒绝(“java.io.FilePermission”“/System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes/0”“write”) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) ~[?:1.8.0_212] 在 java.security.AccessController.checkPermission(AccessController.java:884) ~[?:1.8.0_212] 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[?:1.8.0_212] 在 java.lang.SecurityManager.checkWrite(SecurityManager.java:979) ~[?:1.8.0_212] 在 sun.nio.fs.UnixPath.checkWrite(UnixPath.java:801) ~[?:?] 在 sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:376) ~[?:?] 在 java.nio.file.Files.createDirectory(Files.java:674) ~[?:1.8.0_212] 在 java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) ~[?:1.8.0_212] 在 java.nio.file.Files.createDirectories(Files.java:727) ~[?:1.8.0_212] 在 org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:92) ~[lucene-core-7.7.0.jar:7.7.0 8c831daf4eb41153c25ddb152501ab5bae3ea3d5-jimczi-2019-02-04 23:16:28] 在 org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:41) ~[lucene-core-7.7.0.jar:7.7.0 8c831daf4eb41153c25ddb152501ab5bae3ea3d5-jimczi-2019-02-04 23:16:28] 在 org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:45) ~[lucene-core-7.7.0.jar:7.7.0 8c831daf4eb41153c25ddb152501ab5bae3ea3d5-jimczi-2019-02-04 23:16:28] 在 org.elasticsearch.env.NodeEnvironment$NodeLock.(NodeEnvironment.java:211) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.env.NodeEnvironment.(NodeEnvironment.java:270) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.node.Node.(Node.java:296) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.node.Node.(Node.java:266) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Bootstrap $5.(Bootstrap.java:212) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:212) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.1.jar:6.8.1] 在 org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.1.jar:6.8.1] ... 6 更多

【问题讨论】:

    标签: java macos elasticsearch search permission-denied


    【解决方案1】:

    尝试 sudo ./elsticsearch 或者我认为授予 ELASTIC BASEDIR 中的数据文件夹的权限(取决于您的安装方式)将解决它(不确定但值得一试)

    【讨论】:

      【解决方案2】:

      Catalina 现在将 /usr/local/ 符号链接到其他一些数据卷。

      通过 brew 安装的 Elasticsearch 为数据和日志创建不同的目录链接。您可以像这样在配置文件中插入完整路径。这是因为弹性搜索不喜欢符号链接吗?

      path.data: /System/Volumes/Data/usr/local/var/lib/elasticsearch/
      path.logs: /System/Volumes/Data/usr/local/var/log/elasticsearch/
      

      这会导致另一个错误,但无法访问插件。

      Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "/System/Volumes/Data/usr/local/Cellar/elasticsearch-full/7.1.1/libexec/modules/percolator/percolator-client-7.1.1.jar" "read")
      

      一种解决方法是手动下载 elasticsearch 并使用自定义启动守护程序从您的用户目录运行。这对我有用。

      也许其他人可以对此有所了解。

      【讨论】:

        【解决方案3】:

        我在使用 ElasticSearch 2.4 和 OpenJDK 8 时遇到了同样的错误,并且在没有 chmodchown 或使用 sudo 运行 ES 的情况下让它工作。

        此评论中的解决方案虽然不理想(可以说您的 java 环境不太安全),但帮助我让它运行:https://stackoverflow.com/a/12317528

        我基本上在java.policy 中添加了以下内容(因为我安装了 AdoptOpenJDK 8,所以我使用 $ sudo nano /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/security/java.policy 对其进行了编辑),在第二个 grant {} 块内,最后:

        permission java.io.FilePermission "/System/Volumes/Data/usr/local/Cellar/elasticsearch@2.4/-", "read";
        permission java.io.FilePermission "/System/Volumes/Data/usr/local/var/elasticsearch/-", "read";
        permission java.io.FilePermission "/System/Volumes/Data/usr/local/var/elasticsearch/-", "write";
        permission java.io.FilePermission "/System/Volumes/Data/usr/local/var/elasticsearch/-", "delete";
        

        请注意,我的路径和你的路径略有不同(我使用的是 ES 2.4,而你使用的是 6.8,这可能是相关的),但希望这可以帮助你摆脱困境。

        【讨论】:

          【解决方案4】:

          如果您降级了您的 Elasticsearch 版本,Elasticsearch 无法理解最新版本生成的文件,因此一种解决方案是删除数据目录(小心它会删除您的所有数据)

          rm -rf System/Volumes/Data/usr/local/var/lib/elasticsearch/nodes
          

          或者另一种解决方案是回到你以前的版本(最近的版本)

          【讨论】:

            猜你喜欢
            • 2021-04-16
            • 1970-01-01
            • 2021-03-25
            • 1970-01-01
            • 2014-07-17
            • 1970-01-01
            • 2019-07-15
            • 2018-05-25
            • 2019-01-15
            相关资源
            最近更新 更多