2011-10-19 10 views
0

私はあるフォルダから別のフォルダにファイルをコピーする小さなJavaジョブを作成しようとしています。ジョブは1時間に1回実行されるスクリプトから実行されます。私はジョブが既に実行されている場合、いくつかの値を返すことができるJavaジョブで少しチェックしたいと思います。ジョブが実行されている場合の戻り値

問題は、どうやってこれを行うのかわかりません。助言がありますか?

ジョブは、「java myjob arg1 arg2」のように実行されます。 1時間前に開始されたジョブがまだ実行中であるかどうかを確認することも可能ですか?

EDIT

だけで何か...と思っ

このジョブが実行されるたびので、それは提案文句を言わない仕事の下に新しいプロセスIDを取得します。私の仕事は、このように別のスクリプトから実行されます。

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

答えて

1

あなたの仕事が始まるたびに、ロックファイルを作成してジョブのPIDを入れます(Unixでは簡単、WindowsやJavaでは可能です)。ジョブがまだ実行中かどうかを確認するには、そのファイルからPIDを取得し、それが現在のプロセスのリスト内にまだ存在するかどうかを確認します。

このようにして、ジョブがまだ(実際には)であるかどうかを知ることができます(つまり、ロックファイルを削除する前にクラッシュしていない)。

ジョブが終了した後もスタートアップスクリプトによってこのファイルが削除された場合、ジョブの前回の実行が正常に終了したか(存在しないか)、クラッシュしているかどうかを知ることができますまだ存在している)、またはまだ実行中です。

+0

これは、私は非常に好き! - 私の問題は、私はWindowsマシン上で開発していますが、Unixマシンにデプロイされることです。 winとunixの両方で動作するprocessIDをチェックする方法があるかどうか知っていますか? – Herter

+0

私はUnixとWindowsの両方で動作する方法を知らない。このようなスクリプトを実行する必要があるとき、私はそれをLinuxのボックスで開発しました。未亡人のUNIXシェル環境をシミュレートするには、cygwinや仮想Linuxボックスを試してみましょう(自由にダウンロードできる多くのVMWareイメージがあります)。また、JavaでPIDを取得する(おそらく信頼できない)方法がいくつかあります。http://stackoverflow.com/questions/35842/process-id-in-javaがんばろう。 –

3

あなたはPROCESSLISTたり、さらに簡単に相談することができ、あなたはそれがあるので、あなたは、仕事を起動し、ジョブが完了した後、削除するたびに、いくつかのファイルを作成することができますファイルの存在を確認し、プロセスが実行中であることを知ることができます(またはプロセスがクラッシュし、ファイルが削除されていない)。

+0

あなたが知っている、それは実際には悪くない! :)私はそれを間違いなく考慮します – Herter

関連する問題