本文主要是介绍启动Canal服务错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明:记录一次启动canal服务器的错误;
场景
为了方便使用,我有一个习惯,将一些开发应用,如redis、mysql、nacos、xxljob等等,将它们的启动程序配置环境变量,通过在CMD中敲它们的启动程序名,或者再自定义一个bat脚本用来启动,通过敲bat脚本名来启动程序,这样非常方便。
参考以下两篇文章
-
如何通过bat文件启动应用程序
-
如何将Redis、Zookeeper、Nacos配置为Windows系统的一个服务
今天如往常一样,我将canal的启动程序写了一个bat脚本,取名canal,到时候就可以在cmd中敲canal
启动程序,如下:
但是,通过CMD敲canal
报下面的错误
错误信息:
16:27:03,125 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[RocketmqClientAppender] - Failed to create parent directories for [C:\Users\10765\..\logs\canal\rocketmq_client.log] 16:27:03,125 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[RocketmqClientAppender] - openFile(../logs/canal/rocketmq_client.log,true) call failed. java.io.FileNotFoundException: ..\logs\canal\rocketmq_client.log (系统找不到指定的路径。) at java.io.FileNotFoundException: ..\logs\canal\rocketmq_client.log (系统找不到指定的路径。)
这个我上面创建的canal.bat
脚本的内容没有关系,因为我直接在当前位置双击该脚本就能正常启动。
解决
这个问题,实际上是因为canal的源码里关于日志路径用的是相对路径,而通过cmd窗口来启动程序,相当于如下操作:
cmd.exe canal.bat
所以在canal代码中,识别当前程序启动路径,就识别到了cmd应用的路径去了。不过有一点我不明白,在系统中cmd.exe是在C:\Windows\system32
,怎么会识别到当前用户的目录(C:\Users\10765
)
综上,canal服务不能通过CMD命令的方式来启动。
这篇关于启动Canal服务错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!