Mac M2上Elasticsearch通过Brew启动失败问题求助
Mac M2 上 Elasticsearch 通过 brew services 启动异常问题
问题现象
- 执行
brew tap elastic/tap和brew install elastic/tap/elasticsearch-full完成安装后,运行brew services start elasticsearch-full报错:
#####name#####@#####name#####-ui-MacBookAir ~ % brew services start elasticsearch-full Warning: Calling plist_options is deprecated! Use service.require_root instead. Please report this issue to the elastic/tap tap (not Homebrew/brew or Homebrew/homebrew-core), or even better, submit a PR to fix it: /opt/homebrew/Library/Taps/elastic/homebrew-tap/Formula/elasticsearch-full.rb:68 Bootstrap failed: 5: Input/output error Try re-running the command as root for richer errors. Error: Failure while executing; `/bin/launchctl bootstrap gui/501 /Users/#####name#####/Library/LaunchAgents/homebrew.mxcl.elasticsearch-full.plist` exited with 5.
- 执行
brew services restart elasticsearch-full时,控制台显示启停成功,但服务未实际运行,且弹出**“JDK已损坏”**提示:
brew services restart elasticsearch-full Warning: Calling plist_options is deprecated! Use service.require_root instead. Please report this issue to the elastic/tap tap (not Homebrew/brew or Homebrew/homebrew-core), or even better, submit a PR to fix it: /opt/homebrew/Library/Taps/elastic/homebrew-tap/Formula/elasticsearch-full.rb:68 Stopping `elasticsearch-full`... (might take a while) ==> Successfully stopped `elasticsearch-full` (label: homebrew.mxcl.elasticsearc ==> Successfully started `elasticsearch-full` (label: homebrew.mxcl.elasticsearc
- 直接执行
elasticsearch命令可正常运行。
当前环境:Elasticsearch 7.17.4,openjdk 1.8.0_292,Mac M2,已尝试重装Elasticsearch、Brew及重启设备,问题未解决。
问题分析
运行状态判断:直接执行
elasticsearch能正常运行,说明Elasticsearch核心程序及依赖无故障,问题仅出在brew services的服务管理层面,不影响Elasticsearch本身功能使用,但无法通过brew实现自动启停管理。根源定位
- brew tap脚本兼容性问题:报错提示
Calling plist_options is deprecated! Use service.require_root instead,说明elastic/tap维护的Formula脚本使用了Homebrew已废弃的API,在M2架构的Homebrew环境下存在兼容性问题,导致launchd无法正确加载服务配置。 - JDK公证拦截:弹出“JDK已损坏”是因为macOS对未经过苹果公证的软件会进行安全拦截,openjdk 1.8.0_292可能未通过公证,且brew services启动时的权限环境触发了系统验证,而直接执行命令时的用户环境绕过了该验证。
- launchd配置权限/路径问题:brew生成的plist文件可能存在权限错误或路径配置异常,导致bootstrap操作出现输入输出错误。
- brew tap脚本兼容性问题:报错提示
修复方案
方案1:修复brew服务的Formula脚本
- 找到elastic/tap的Formula文件:
/opt/homebrew/Library/Taps/elastic/homebrew-tap/Formula/elasticsearch-full.rb - 编辑第68行,将废弃的
plist_options相关代码替换为service.require_root true - 重新安装elasticsearch-full:
brew reinstall elastic/tap/elasticsearch-full - 再次尝试启动服务:
brew services start elasticsearch-full
方案2:解决JDK公证拦截问题
- 执行
brew services start elasticsearch-full触发“JDK已损坏”提示后,打开系统设置 -> 隐私与安全性,找到对应提示并点击“允许” - 若系统未显示提示,可通过终端执行命令绕过公证检查:
xattr -d com.apple.quarantine /opt/homebrew/opt/openjdk@8/libexec/openjdk.jdk(路径需匹配你的openjdk实际安装位置)
方案3:手动配置launchd服务
如果brew services的问题无法快速修复,可手动创建启动配置:
- 在
~/Library/LaunchAgents/下新建文件com.elasticsearch.plist,内容示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.elasticsearch</string> <key>ProgramArguments</key> <array> <string>/opt/homebrew/bin/elasticsearch</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/tmp/elasticsearch.log</string> <key>StandardErrorPath</key> <string>/tmp/elasticsearch.err</string> </dict> </plist>
- 设置文件权限:
chmod 644 ~/Library/LaunchAgents/com.elasticsearch.plist - 加载服务:
launchctl load ~/Library/LaunchAgents/com.elasticsearch.plist - 停止服务可执行:
launchctl unload ~/Library/LaunchAgents/com.elasticsearch.plist
方案4:升级Elasticsearch版本
7.17.4为较老版本,尝试升级到8.x系列(注意业务代码的版本兼容性),新版本的elastic/tap Formula大概率已修复plist API废弃的问题,同时对M2架构的支持更完善。
内容的提问来源于stack exchange,提问作者로스트 모코코
相关产品推荐
相关产品推荐

