java - 如何在 Amazon EC2 中运行 Jar?

标签 java eclipse amazon-web-services amazon-ec2 cloud

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

有什么方法可以让我将 Jar 上传到亚马逊,然后亚马逊在不与我的计算机交互的情况下运行它?我听说网络爬虫在亚马逊运行了数周,却没有将数据下载到开发人员的机器上,并且几个月来都不让开发人员在不关闭的情况下打开他的机器。

我要求的功能就像 Amazon Elastic Map-Reduce 中的“作业流程”。您上传代码,它会在内部运行它。无论您是否保持“您的”机器处于开启状态,都没有关系。

最佳答案

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

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

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

!!编辑!!

值得注意的是,我发现在工作开始后停止它的最简单方法是:

ps -ef | grep java

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

然后杀死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 内部系统消息)或显式写入 stdout 的任何内容(即 System.out.println()) 语句;

关于java - 如何在 Amazon EC2 中运行 Jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314700/

相关文章:

java - 如何减小 SWT 中组合框的默认大小(项目的高度)?

java - Eclipse 自动空白禁用

java - 单击按钮时更改背景图像

java - 与 slf4j 库相关的编译问题

amazon-web-services - 如何配置在 AWS/ElasticBeanstalk/Docker 上运行的 GlassFish 实例?

java - 确保用户浏览器检索到 css、js 和图像的全新副本

java - 使用 Angular 将多个文件上传到 Spring Controller

java - 使用 iText 导出 PDF

java - java中等效的AWS cloudformation的json "Ref"是什么

mysql - 如何按字母顺序对表格中的列进行排序?