2011-10-19 16 views
0

我試圖做一個小的java作業,將文件從一個文件夾複製到另一個文件夾以及一些數據庫存儲等。作業從每小時執行一次的腳本運行。我想在java作業中檢查一下,如果作業已經運行,它可以返回一些值。如果作業正在運行,返回值

問題是,我不知道如何做到這一點。有什麼建議麼?

每小時作業運行如下:「java myjob arg1 arg2」。是否有可能檢查一小時前開始的工作是否仍在運行?

編輯

只是想的東西。由於每次這項工作時,它會得到一個新的進程id下面不會工作的建議。我的工作會從另一個這樣的腳本運行:

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

回答

1

每次您的工作開始時,創建一個鎖文件並將作業的PID添加到它(在Unix上很容易,當然可以在Windows或Java中執行)。要查看作業是否仍在運行,請從該文件獲取PID,看看它是否仍在當前進程的列表中。

通過這種方式,您將能夠確定作業是否仍在運行(即在除去鎖定文件之前它沒有崩潰)。

如果您的啓動腳本也將在作業完成後刪除此文件,您還可以確定上一次作業運行是否成功完成(文件不存在),崩潰(帶有不存在PID的文件仍然存在),或者仍在運行。

+0

這個,我非常喜歡! - 我的問題是我在Windows機器上開發,但它將部署在unix機器上。你知道是否有辦法檢查可以在win和unix上運行的processID嗎? – Herter

+0

我不知道在Unix和Windows上都能工作的方式。當我不得不做這樣的腳本時,我在Linux機器上開發了它。爲了模擬widows上的unix shell環境,我會嘗試使用cygwin或虛擬Linux系統(有許多免費下載的vmware映像)。似乎也有一些(可能是不可靠的)方法來獲得Java中的PID:http://stackoverflow.com/questions/35842/process-id-in-java。祝你好運。 –

3

您可以諮詢ProcessList中,或者更簡單,你可以創建一些文件每次啓動作業,並在作業完成後刪除完成,所以它是可能檢查文件的存在並知道該進程正在運行(或進程崩潰,文件未被刪除)......只是一個想法。

+0

你知道嗎,那其實不錯! :)我會考慮的,絕對 – Herter

相關問題