我在深入研究这个错误时遇到了一些困难,似乎无法通过我的设置找到与此问题相关的任何内容。我确实找到了一些关于错误的文章,但经过研究后它们不适用于我的设置。
这是正在发生的事情......我只是指出它发生在IBM AIX 7.1上,以防有任何特定于AIX的东西我应该看一下,但我想这个错误也可能发生在Linux机器上。
目标:
运行命令,将命令传递给kafka-console-producer.sh到特定的Kafka主题,如下所示:
ps -ef | /kafka/bin/kafka-console-producer.sh --broker-list <IP>:9092 --topic running_processes
上面的命令获取“ps -ef”的输出并将其发送到我的主题(running_processes)。如果我在通过shell登录系统时运行它,这完全没问题。
但是,如果我在每5分钟运行一次的crontab条目中执行与脚本完全相同的操作,如下所示:
0,5,10,15,20,25,30,35,40,45,50,55 <path of script> >> <path of log> 2>&1
这是我在日志文件中得到的:
...
Exception in thread "main" java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/apache/kafka/clients/producer/Callback, offset=6
...
我的第一个猜测是没有为crontab的上下文设置JAVA_HOME环境变量,所以我在脚本中手动添加了该环境变量以确保保存了JAVA_HOME。
此外,我查看了kafka / bin / kafka-run-class.sh文件并查看了其他可能发生的变量,因为毕竟kafka-console-producer.sh确实引用了该文件。例如,我手动将该文件中引用的JAVA_MAJOR_VERSION设置为脚本的一部分。
仍然没有运气。再说一遍,我的大脑在于,正如普通用户登录shell一样,如果我运行脚本,它就可以工作了。它仅在使用crontab以一定间隔计划脚本时不起作用。
一切都指向我在crontab的上下文中不可用的一些环境变量,但我无法弄明白。
有任何想法吗?
正如@LorinczyZsigmond所述,在设置JAVA_HOME之后,然后路径(导出PATH =“$ JAVA_HOME / bin:$ PATH”工作。谢谢!