2017-10-16 63 views
0

我有一個每小時執行一次.sh腳本的crontab作業。這個腳本導航(cd ...)到一個目錄,然後啓動一個java程序(java -jar)。超時的Crontab作業

如果我想確保java程序運行時間不超過30分鐘,我應該在哪裏設置超時時間?它應該在crontab還是在.sh腳本中?

+0

如果它只運行Java,爲什麼不在Java本身中執行超時?這將有助於您在另一個環境或甚至操作系統中運行java。 –

回答

1

你把超時時間與情況相關。我可能會使用的一個指標是「什麼會最大程度地減少下一個人的認知和維護負擔(誰可能是我多年的時間!」)?「有時,情境的背景決定使用cronjob程序的參數,其他時候最好使用timeout。其他時候,您可能會使用...

上下文事項。 您的的情況最有意義嗎?

+0

這是一個很好的觀點。讓我提供更具體的信息。基本上,當作業運行時,它會啓動一些進程(1用於crontab調度,1用於.sh腳本,1用於JVM)。我希望所有進程在超時後結束。從維護的角度來看,最簡單的方法是直接在crontab中設置超時。由於我不確定在Ubuntu中如何處理進程層次結構,所以我擔心JVM進程會繼續運行,如果我這樣做了,只有.sh腳本會被殺死。 –

+0

尋求最簡單的解決方案,只在需要時升級。因此,我會嘗試'超時',看看它是如何工作的。如果不是,我可能會考慮簡化一些細節。例如,你的腳本是做什麼的?如果它只是設置環境然後調用JVM,那麼可以考慮'exec',這樣shellscript的PID就成爲JVM的PID。在那個時候,'超時'應該做你想要的。如果它比這更復雜,我可能會在你的shell腳本中設置你的超時時間,並殺死所有必要的進程。總之,「嘗試一下,看看」。 – hunteke

+0

我想我會用把超時中的cronjob這樣走: 超時600/bin/sh的myscript.sh 然後在劇本,我會打電話給我的Java應用程序這樣: EXEC須藤Java的罐子myJarFile.jar中。這會起作用嗎? –