我需要在java程序中执行shell脚本。我发现我可以使用processbuilder和runtime.exec ..但是我的网络服务器每180秒超时但是我的脚本执行需要更多...我不想使用这种方法的过程..有没有其他方法在哪里我可以使用线程执行此操作。
感谢。
答案 0 :(得分:1)
我假设脚本的响应是供人阅读的。
良好的界面设计和人性化表明,如果您的脚本运行时间超过180秒,那么它应该与Web服务器分开运行。在linux上,我建议将它放入'cron',并让它定期运行。您只能通过Web服务器提供脚本的结果,响应时间以秒为单位而不是几分钟。
如果您的脚本依赖于http请求中的参数或仅在Web服务器环境中提供的其他信息,则您有以下选择。
如果没有其他信息,例如脚本的示例,或者您从哪里获得结果的说明,那就是我能做的最好的事情。
答案 1 :(得分:0)
进程可以运行多个线程,但它们仍然是进程的一部分。
因此,java程序中的所有线程都是java进程的线程,并且线程无法运行另一个程序的线程。
shell脚本由程序运行:shell程序! (/ bin / bash或/ bin / sh)
无论如何,shell脚本将主要在其他几个进程中运行其他程序。
不,你不能在java的一个线程中运行一个shell。
答案 2 :(得分:-1)
通常,如果您的代码与Java程序不同,例如单独脚本中的代码,那么当代码可以集成到代码中时,没有理由说明代码执行外部脚本的原因。该程序。它充其量是不安全的。由于外部脚本是可编辑的,因此您的程序基本上允许任意代码执行。你在做什么听起来几乎像它应该被限制在单元测试或构建任务。
作为单元测试任务,您可以使用线程JUnit运行程序在项目的测试阶段运行外部脚本。
此外,与您的程序分开,您也可以使用Gradle任务并使用Gradle具有的parallellforks option来执行它。