【发布时间】:2012-12-05 19:51:32
【问题描述】:
我有一个问题,我不知道如何解决。我使用 1 个单线程的执行程序服务制作了一个 java 轮询应用程序。该服务进行一些文件操作和数据库交互。
如果我们从命令 promt/executable jar 使用 java -jar myapp.jar 运行,它会运行。我们可以随时阻止它。
现在我需要为用户制作 2 个脚本(比如 tomcat)。一个用于启动应用程序,另一个用于停止。
但是认为当用户执行脚本停止时,该进程不会被杀死,直到执行器服务的所有作业/线程完成。因为,如果我们在运行状态下终止进程,执行该作业的系统将停止可能处于不一致状态(例如在移动文件期间)。
问题是,我无法从 shell 脚本访问 ExecutorService 结果。
如何制作两个脚本来运行此应用并控制和访问这些行为。 ?
编辑:
我的 myapp.jar 运行定期执行器服务。我需要制作一个停止脚本,它只允许在执行程序服务未运行任务后停止,而不是终止进程。因为,如果我在运行过程中杀死进程,我就会失去系统的一致性。我的系统读取文件并将其移动到另一个目录中。如果我在中间杀死,有些文件会被处理,有些则不会。我需要一个解决方案,如果用户从 UNIX 系统执行停止脚本,该脚本要么不会终止进程,要么等到作业完成。
【问题讨论】:
-
您在停止脚本中到底在做什么?我猜您正在使用
ps搜索具有特定名称的进程,然后发出kill -9命令。如果进程在ExecutorService中停止,你会怎么做? -
@mtk ,myapp.jar 运行定期执行器服务。我需要制作一个停止脚本,它只允许在执行程序服务未运行任务后停止,而不是终止进程。因为,如果我在运行过程中杀死进程,我就会失去系统的一致性。我的系统读取文件并将其移动到另一个目录中。如果我在中间杀死,有些文件会被处理,有些则不会。我需要一个解决方案,如果用户从 UNIX 系统执行停止脚本,该脚本要么不会终止进程,要么等到作业完成。
标签: java linux shell threadpool