如果作业正在运行,则返回值

时间:2011-10-19 08:40:29

标签: java

我正在尝试创建一个小文件,将文件从一个文件夹复制到另一个文件夹以及一些数据库存储等。作业从每小时执行一次的脚本运行。我想对java作业进行一些检查,如果作业已经运行,它可以返回一些值。

问题是,我不知道如何做到这一点。有什么建议吗?

每小时运行作业如下:“java myjob arg1 arg2”。甚至可以检查1小时前启动的作业是否仍在运行?

修改

想到了什么..因为每次运行这个工作都会得到一个新的流程ID,下面的建议不会起作用。我的工作将从另一个脚本运行:

if ${type} = ${sys}
    then 
        java batchjob ${type} ${dir1} ${dir2}

2 个答案:

答案 0 :(得分:3)

您可以查阅进程列表,或者更简单的是,每次启动作业时都可以创建一些文件,并在作业完成后删除,因此可以检查文件是否存在并知道进程正在运行(或者进程崩溃了,文件还没有删除)......只是一个想法。

答案 1 :(得分:1)

每次你的工作开始时,创建一个锁定文件并将作业的PID放入其中(在Unix上很容易,在Windows或Java上都可以使用)。要查看作业是否仍在运行,请从该文件中获取PID并查看它是否仍在当前进程列表中。

这样,您就可以判断作业真的是否仍在运行(即在删除锁定文件之前它没有崩溃)。

如果您的启动脚本也会在作业完成后删除此文件,您还可以判断您的作业的上一次运行是否成功完成(文件不存在),崩溃(具有不存在的PID的文件仍然存在)目前),或仍在运行。