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



我想做一个小java作业,复制文件从一个文件夹到另一个和一些数据库存储等。作业从每小时执行一次的脚本运行。我想有一个小检查在java作业,它可以返回一些值,如果作业已经运行。

问题是,我不知道该怎么做。有什么建议吗?

作业每小时运行如下:"java myjob arg1 arg2"。是否有可能检查1小时前启动的作业是否仍在运行?

编辑

我刚想到…由于每次运行此作业时,它都会获得一个新的进程id,因此下面的建议不起作用。我的工作将从另一个脚本运行,像这样:

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

您可以参考processlist,或者,更简单的是,您可以在每次启动作业时创建一些文件,并在作业完成后删除,因此可以检查文件的存在并知道进程正在运行(或者进程已经崩溃而文件尚未被删除)…这只是一个想法。

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

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

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

最新更新