kdb q - 尽管设置了 $QHOME,但仍未找到许可证
kdb q - license not found despite $QHOME set
在 .bashrc
和 .profile
中,我将 QHOME
变量设置为包含 k4.lic
、l64
、q.k
的目录(由 echo $QHOME
验证)。
当我从登录 shell 启动 q 时一切正常,找到了许可证文件。
当我从 java 以编程方式启动 q 进程时,我得到以下输出
[13:43:48][Step 1/2] WARN [main] (QSession.java:78) - Q Session not alive
[13:43:48][Step 1/2] INFO [main] (QSession.java:97) - QHOME: null
[13:43:48][Step 1/2] INFO [main] (QSession.java:98) - QLIC: null
[13:43:48][Step 1/2] ERROR [main] (QSession.java:101) - Error output
[13:43:48][Step 1/2] '2018.02.06T13:43:46.597 k4.lic
即未找到许可证,因为 QHOME
环境变量未定义。此问题描述为 here:“.bashrc
仅源自登录 shell”。建议的解决方案是
"If you want a variable to be set in all Bourne shell derivatives regardless of whether they are interactive or not, put it in both .profile and .bashrc."
但是我已经把.bashrc
的内容复制到.profile
里面了,还是报同样的错误
不幸的是,无法将许可证的路径作为命令行参数传递给 q
二进制文件,因此我必须使用 QHOME
。
我能做的是在我的 java 项目中放置一个 32 位版本,但显然使用 64 位版本是有利的。
非常感谢建议!
谢谢
感谢@Jonathan McMurray!
确切的解决方案是使用
Runtime.getRuntime().exec(command, envp);
其中 command
例如 q -p 5000
而 envp
例如
String[] envp = {"QHOME="+qHomePath};
在 .bashrc
和 .profile
中,我将 QHOME
变量设置为包含 k4.lic
、l64
、q.k
的目录(由 echo $QHOME
验证)。
当我从登录 shell 启动 q 时一切正常,找到了许可证文件。
当我从 java 以编程方式启动 q 进程时,我得到以下输出
[13:43:48][Step 1/2] WARN [main] (QSession.java:78) - Q Session not alive
[13:43:48][Step 1/2] INFO [main] (QSession.java:97) - QHOME: null
[13:43:48][Step 1/2] INFO [main] (QSession.java:98) - QLIC: null
[13:43:48][Step 1/2] ERROR [main] (QSession.java:101) - Error output
[13:43:48][Step 1/2] '2018.02.06T13:43:46.597 k4.lic
即未找到许可证,因为 QHOME
环境变量未定义。此问题描述为 here:“.bashrc
仅源自登录 shell”。建议的解决方案是
"If you want a variable to be set in all Bourne shell derivatives regardless of whether they are interactive or not, put it in both .profile and .bashrc."
但是我已经把.bashrc
的内容复制到.profile
里面了,还是报同样的错误
不幸的是,无法将许可证的路径作为命令行参数传递给 q
二进制文件,因此我必须使用 QHOME
。
我能做的是在我的 java 项目中放置一个 32 位版本,但显然使用 64 位版本是有利的。
非常感谢建议!
谢谢
感谢@Jonathan McMurray! 确切的解决方案是使用
Runtime.getRuntime().exec(command, envp);
其中 command
例如 q -p 5000
而 envp
例如
String[] envp = {"QHOME="+qHomePath};