M1 Mac 无法成功启动 Nacos
复现操作
- 到 github 下载 release 版本
- 解压得到
-
终端命令
cd bin
进入找到启动脚本文件 startup.sh -
先循例更改一下文件权限 chmod -R 777 startup.sh
-
启动命令
sudo ./startup.sh -m standalone
7. 上分一大串指令是先取到 java 的路径, 然后用系统默认的 java 版本启动 jar 包, 后面是一系列的启动参数, 最后很诡异说正在启动 nacos 单机模式, 但实际上并没有告诉你是否启动成功, 实际就是失败了. 然后提示去查看日志.
8. cd ../logs
命令返回上层并且进入 logs 文件夹查看日志文件, 得到如下
-
最后一个提示比较关键就是没找对应的文件夹或者文件, 破案了, java 调用路径错误了, 导致连启动 jar 包的 java 都找不到
-
这个很短的 /Library/Internet 提示了上面真正执行的脚本命令里有非法空格无法识别(关键错误点)
我已经懒得进去改 startup.sh 文件的脚本了, 后面我仔细看了, 也查了很多资料, 甚至都改过 JAVA_HOME, 牵涉到的因素很多, 踩了不少雷, 最终解决方案就是在路径的空格前面加上 \ 转义字符, 正确识别路径就可以启动成功
sudo /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ext:/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/ext -Xloggc:/Users/billbill/Downloads/code/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/Users/billbill/Downloads/code/nacos/plugins/health,/Users/billbill/Downloads/code/nacos/plugins/cmdb -Dnacos.home=/Users/billbill/Downloads/code/nacos -jar /Users/billbill/Downloads/code/nacos/target/nacos-server.jar --spring.config.additional-location=file:/Users/billbill/Downloads/code/nacos/conf/ --logging.config=/Users/billbill/Downloads/code/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
得到下图:成功启动
涉及问题:
- 我平时用的 zsh, export JAVA_HOME 也是写到了 .zshrc 文件里, 疯狂 source 都没有作用, 后面看了脚本文件, 跑脚本的终端用的是 bash
然后屁颠屁颠又去改了 .bash_profile 文件, export JAVA_HOME, source 一样没用, 启动脚本跑起来还是用的系统默认的 jdk
2. 我的 mac 上装了多个 jdk, 我也脑溢血了, 一个是 idea 里一键下载的, 一个是我学习的时候上 oracle 官网学着下载的, 一个是 mac 系统自带的, 可以通过 /usr/libexec/java_home -v
输出
真是脑溢血, 然后我顺着这些路径再次看了一下这些 jdk, 发生了 1. 上面的各种到 zsh 跟 bash 的配置文件里 export 然后 source, 通通都没用
END:
最后看了下日志, 看到输出的最终的启动完整脚本语句, 把路径改正确, 能找到 java 之后才启动成功, 真恶心啊 还是回归最初的原则就是找到机子上的 java 去启动 jar 包, 然后输入一些配置的参数, 跟 c 语言的 main 程序启动差不多输入一堆 args, 就可以顺利启动了, 脚本文件唉基本没什么用还容易让人花更大的力气去修改脚本文件, 简直吃力不讨好, 还不如自己照着启动语句照猫画虎, 正确改好路径就成功启动了, 真的脑溢血