我有一个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的配置方式引起了问题。
这是环境信息:
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但立即
这仍然只在前景工作。 我在这里漏掉了什么?