当前位置: 首页 > 面试题库 >

Java 1.6被后台Symfony任务调用时损坏

鲁旭
2023-03-14
问题内容

我有一个Symfony任务,该任务生成一些文件,将exec调用到jar中,然后解析输出。jar从命令行运行良好,任务从命令行运行良好。

问题:

我在基于表单提交的操作中调用任务。我有行动在后台启动一个新的php进程来运行任务,而不管它现在生成的页面是什么。

到java调用时,说exec(java -version); 它输出以下内容:

Error occurred during initialization of VM
Unable to load native library: libjava.jnilib

我感觉这与启动任务时调用php的方式有关,但是我迷失了为什么它没有与使用命令行时相同的库。

如何使Java从“后台” Symfony任务运行?

注意事项

在我将Mamp从1.9.6升级到2.0.3之前,它一直没有任何问题。

我看过: 损坏的Java Mac 10.6, 但是由于我可以从命令行正常运行它,所以似乎是另一个问题。

我也从拒绝的shell_exec()权限中查看了执行symfony任务命令,但我认为这里的权限不是问题。

更新:

我将问题缩小到MAMP并从浏览器获取php。

<?php
echo exec("java -version")
...

从命令行调用时有效,但通过浏览器打开php文件时无效。因此,MAMP的配置方式引起了问题。

这是环境信息:

  • 可变值
  • 外壳/ bin / bash
  • TMPDIR / var /文件夹/ YH / YH + uW3hDHZyxQ5AiUtr0T ++++ TI / -Tmp- /
  • Apple_PubSub_Socket_Render / tmp / launch-3rr9ZI / Render
  • USER myuser
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK / tmp / launch-zinaMI / Listeners
  • __CF_USER_TEXT_ENCODING 0x1F5:0:0
  • 路径/ usr / bin:/ bin:/ usr / sbin:/ sbin
  • 残影/
  • HOME /用户/ myuser
  • SHLVL 2
  • DYLD_LIBRARY_PATH / Applications / MAMP / Library / lib:
  • LOGNAME myuser
  • 显示/tmp/launch-FYrw70/org.x:0
  • _ / Applications / MAMP / Library / bin / httpd

Dyld似乎在这里。我需要找到一种方法来从Mamp的环境中取消它。

解决了

我想出了一个解决方案。看起来像是骇客,但却奏效了。我将其张贴在这里,以防万一其他人遇到相同的问题。

正如破碎的Java Mac 10.6所述,必须未设置DYLD_LIBRARY_PATH。不知道为什么,在Unix系统上似乎需要它,但在MacOSX上却不需要。

如果MAMP设置为/ Applications / MAMP / Library / lib,则如何禁用它:编辑 / Applications /
MAMP / Library / bin / envvars
并注释掉以下几行

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

这样看起来像这样:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

这应该可以解决问题,并且Java 1.6可以正常运行。

这是黑客吗?还是这是MAMP中的错误?如果您知道解决此问题的更好方法,请回答。


问题答案:

这是@paaat添加的解决方案。我只是发帖以将这个问题从未答复的列表中删除。

我想出了一个解决方案。看起来像是骇客,但却奏效了。我将其张贴在这里,以防万一其他人遇到相同的问题。

正如破碎的Java Mac
10.6所述,必须未设置DYLD_LIBRARY_PATH。不知道为什么,在Unix系统上似乎需要它,但在MacOSX上却不需要。

如果MAMP设置为/ Applications / MAMP / Library / lib,则如何禁用它:编辑/ Applications /
MAMP / Library / bin / envvars并注释掉以下几行

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

这样看起来像这样:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

这应该可以解决问题,并且Java 1.6可以正常运行。

确保重新启动MAMP的html" target="_blank">安装,以使更改生效。



 类似资料:
  • 说明 在后台任务中,因为是运行在task进程,所以无法使用协程和协程客户端。如果你要操作数据库或Redis,一定要配置同步的连接池。 配置 项目配置文件中mainServer.configs.task_worker_num一定要配置为大于0,否则无法使用后台任务。 定义任务执行类 <?php namespace Test; use Imi\Task\TaskParam; use Imi\Task

  • 问题内容: 我想知道哪种方法是在Java中实现某种后台任务的最有效方法(我想那将是某种非阻塞线程)。更准确地说- 我有一些Java代码,然后在某个时候需要执行长时间运行的操作。我想做的是在后台执行该操作,以便程序的其余部分可以继续执行,并且当该任务完成时,只需更新一些特定的对象即可。然后,其他组件将检测到此更改。 问题答案: 您应该使用线程池, http://java.sun.com/docs/b

  • 问题内容: 我正在为我的学校创建一个应用程序,该应用程序应每n分钟检查一次网站上是否有新标记。为此,当用户首次登录时,实际标记的编号将保存在“ UserDefaults”中。当应用终止时,n分钟后,将重新计算标记的数量,并将其与前一个标记进行比较,并在更改数量时发送通知。 我想知道是否有一种方法可以执行此任务。我尝试在-applicationWillTerminate-中创建一个计时器,但只触发了

  • 问题内容: 如何杀死linux中最后一个生成的后台任务? 例: 问题答案: bash中有一个特殊的变量: $!扩展为在后台执行的最后一个进程的PID。

  • 问题内容: 我尝试定期在JavaFX应用程序后台线程中运行,这会修改一些GUI属性。 我想我知道如何使用Task和Service类,并且不知道如何在不使用Thread#sleep()方法的情况下运行此类定期任务。这将是很好,如果我可以使用一些Executor从Executors编造的方法) 我尝试Runnable每5秒运行一次,这会重新启动,javafx.concurrent.Service但立即

  • 这仍然只在前景工作。 我在这里漏掉了什么?