1

对于这个复杂的帖子,我提前道歉。我需要找到一种方法来自动更新数据库,其中包含每 5 分钟调用一次 Web 服务的信息。我计划编写一个 Java 程序,该程序将从云上的 Web 服务中提取数据并将其放入数据库中。我需要这个程序每隔 5 分钟左右从云中提取一次,以便我们按时间顺序获取数据。什么是实现这一点的好方法?这将在运行 Linux 的服务器计算机上完成。

我在考虑两种可能性: 1. 我可以在无限循环中编写一个 Java 程序,该程序每天 24 小时在服务器上运行,并且每次将其线程休眠 5 分钟。如果是这样,我将如何确保服务器计算机保持程序运行?如果服务器重新启动,它会再次开始运行吗?我需要一些方法来自动化它。有任何想法吗?或者 2. 我可以编写一个非循环程序,并以某种方式让操作系统或其他软件每 5 分钟运行一次程序。有没有办法让 Linux 或服务器软件做到这一点?有任何想法吗?

如果有人能指出我正确的方向,将不胜感激。

4

5 回答 5

3

您提到了两种不同的“技术”,它们有不同的处理方法,一种是 Java,第二种是 linux。

在linux上你有

  1. CRON - 这是一种执行计划任务(脚本)的“linux”方式,因此您可以每 5 分钟运行一次 java 程序/任何您想要的。正确定义你不应该被服务重启所困扰,cron 将在服务重启时自动运行并处理你的 java 程序。您可能想改用 anacron,但您应该与您的系统管理员联系以了解此处的详细信息。

  2. 如果您不想在 linux 中运行计划作业并且不想在 Java 中管理计划,您确实可以编写一个程序,该程序将在无限循环中运行,因为该进程将永远运行,但在这种情况下,我建议您使用 java.util.Timer 而不是 sleep,或者如果您不介意使用第三方 - 而不是 Quartz,它是一个成熟的 Java 调度程序。但是为了让这个程序在重启时运行,你应该将它定义为 linux 中的服务。基本上,您将一些脚本(正确定义)放在预定义的文件夹中,注册服务,重新启动时 linux 将调用此脚本,以便您可以根据需要运行。

    服务 myscheduledtask 开始/停止/状态

技术细节根据 Linux 发行版略有变化,但运行计划任务的基础设施肯定存在于任何发行版中。例如在 Redhat 上,您应该将chkconfig命令视为入口点。

现在什么方法更好?这里没有灵丹妙药的解决方案。我可能会使用基于 cron 的方法,因为它更容易。但作为一名 java 程序员,我意识到 java 将提供一个跨平台的解决方案(如果有一天你会迁移到另一个操作系统,那么你将不得不再次定义调度机制)。另一方面,拥有更少的进程总是更好,因此始终运行的进程在这里是一个缺点:) 所以,选择权在你

希望这可以帮助

于 2013-08-06T05:44:17.753 回答
1

Linux 有一个程序 cron,如果你愿意,它可以每 5 分钟启动一次你的 java 程序。

于 2013-08-06T05:31:12.470 回答
1

您可能会设置一个 cron 作业,该作业调用您编写的 java 程序,以在您指定的时间间隔(示例中为 5 分钟)从您的 Web 服务中检索数据。

查看 wiki 文章以获取信息。

https://en.wikipedia.org/wiki/Cron

于 2013-08-06T05:31:25.047 回答
1

我会创建一个程序来完成我需要的任务,然后使用例如 cron 来安排它。

于 2013-08-06T05:31:39.907 回答
1

1) 我可以编写一个无限循环的 Java 程序,该程序每天 24 小时在服务器上运行,并且每次将其线程休眠 5 分钟。如果是这样,我将如何确保服务器计算机保持程序运行?

将其作为守护进程运行,该进程会在服务器重新启动时自动启动。

如果服务器重新启动,它会再次开始运行吗?

阅读“init”以了解您的特定 Linux 风格。(我不能更具体,因为在不同的 Linux 发行版上至少有 3 种常用的“init”系统。)

2)我可以编写一个非循环程序,并以某种方式让操作系统或其他软件每 5 分钟运行一次程序。有没有办法让 Linux 或服务器软件做到这一点?

阅读“cron”“crontab”

于 2013-08-06T05:32:18.470 回答