2014-01-23 68 views
1

我對亞馬遜很新。我有一個讀取GB數據的Java文件,我正在使用AWS ToolKit for Eclipse。這裏的缺點是,如果我需要讀取整個抓取的數據,那麼我必須讓機器運行數週,而這是不可能的。除此之外,我無法將GB數據下載到本地PC(因爲它正在讀取數據)。如何在Amazon EC2中運行Jar?

有沒有什麼方法可以將Jar上傳到亞馬遜,亞馬遜是否可以在不與我的電腦互動的情況下運行它?我聽說過幾個星期在亞馬遜上運行的網絡爬蟲,沒有將數據下載到開發者機器中,也沒有讓開發人員在未關閉數月的情況下開啓他的機器。

我所要求的功能就像Amazon Elastic Map-Reduce中的「工作流程」一樣。你上傳代碼,它在裏面運行。無論您是否保持「您的」機器打開都沒關係。

+0

是的,你可以上傳並運行它。這已被[討論] [1] [前] [2]: [1]:http://stackoverflow.com/questions/16564305/ec2-run-jar-on-running-ec2-實例 [2]:http://stackoverflow.com/questions/20669862/problems-in-running-jar-on-amazon-ec2 – crnlx

+0

@crnlx:不,它不是。你必須保持控制檯在你的機器上打開 –

+0

你可以cron它,不是嗎? – crnlx

回答

4

您可以用nohup命令* nix中運行

nohup java -jar myjar.jar 2>&1 >> logfile.log & 

這將運行jar文件,輸出[stderr和標準輸出]引導到logfile.log。需要&以便它在後臺運行,釋放命令行/ shell/

!!編輯!

值得一提的是,我發現了,一旦它開始停止作業的最簡單的方法是:

ps -ef | grep java

返回ec2-user 19082 19056 98 18:12 pts/0 00:00:11 java -jar myjar.jar

然後kill 19082

請注意,您可以tail -f logfile.log或其他衍生產品[less,cat,head]來查看罐子的輸出。

回答到問題/評論

嗨。你可以使用System.out.println(),那會在logfile.log中結束。指示的命令是2&>1,意思是「將流2重定向到流1」。在unix中說這意味着將stderr重定向到標準輸出。然後我們指定>> logfile.log這意味着「將輸出附加到logfile.log」。當System.out.println()寫入標準輸出時,它會以logfile.log結尾。

但是,如果您的應用程序設置爲使用Log4j/commons-logging,那麼使用LOG.info("statement");將最終在配置的「log4j.properties」日誌文件中。使用這種配置,最終將在logfile.log中出現的唯一語句將是系統生成的(錯誤,linux內部系統消息)或任何明確寫入標準輸出(即System.out.println())語句的語句;

+0

我現在就試試這個 –

+0

你好,代碼如何知道它需要把東西放到日誌文件中?在Java的情況下,'System.out.println()'寫入日誌文件? –

+0

請參閱編輯。評論框中沒有足夠的空間! –

相關問題