如何在Amazon EC2中运行Jar?

Pea*_*Gen 2 java eclipse cloud amazon-ec2 amazon-web-services

我是亚马逊的新手.我有一个Java文件,它读取已爬网数据的GB,我使用AWS ToolKit for Eclipse运行它.这里的缺点是,如果我需要读取整个已爬网数据而且不可能,我必须让我的机器运行数周.除此之外,我无法将GB的数据下载到我的本地PC(因为它正在读取数据).

有什么方法可以将Jar上传到亚马逊,亚马逊运行它而不与我的电脑打交道?我听说网络爬虫在亚马逊上运行数周而没有将数据下载到开发者机器中,并且没有让开发人员在没有关闭数月的情况下打开他的机器.

我要问的功能就像Amazon Elastic Map-Reduce中的"工作流程"一样.你上传代码,它在里面运行.是否打开"你的"机器并不重要.

Al *_*man 11

您可以使用nohup命令运行*nix

nohup java -jar myjar.jar 2>&1 >> logfile.log &
Run Code Online (Sandbox Code Playgroud)

这将运行您的jar文件,将输出[stderr和stdout]指向logfile.log.的&需要,以便它在后台运行,从而释放了命令行/壳/

!编辑!!

值得注意的是,一旦启动就停止工作的最简单方法是:

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]来查看jar的输出.

回答问题/评论

你好.您可以使用System.out.println(),是的,这将最终出现在logfile.log中.指示2&>1这意味着"将流2重定向到流1"的命令.在unix中,这意味着重定向/管道stderr到stdout.然后我们指定>> logfile.log"将输出附加到logfile.log".当System.out.println()写入stdout时,它最终会出现在logfile.log中.

但是,如果您的应用程序设置为使用Log4j/commons-logging,则使用LOG.info("statement");将最终在配置的"log4j.properties"日志文件中.有了这个配置,它将结束在唯一的语句logfile.log将是那些或产生的任何系统(错误,Linux的内部系统消息)任何进行了明确写到标准输出(即System.out.println())语句;