如何从 crontab -e 触发 java 函数或 class

How to trigger a java function or a class from crontab -e

我正在尝试 运行 每 5 分钟执行一次 cronjob,实际任务是触发 curl 终点 来自 java class 中的一个方法。 我的 crontab -e 如下所示: */5 * * * * bash /home/ec2-user/script.sh 上面的行工作正常,但它没有从 Cron 作业 class 触发 FTPConnect.start() 我的 Cron 作业如下所示: @零件 public class CJob{

@Scheduled(cron="*/5 * * * * curl -v http://localhost:8080/apiname/v1/cids/$filename" ) // Every 12 hours
public static void fetchFromSFTP() {
    try {
        FTPConnect.start();
        return;
    } catch (Exception e) {
        System.out.println("There was an error running this cron.");
        e.printStackTrace();
        System.exit(1);
    }
}

}

哇,你问问题的方式和你提供的信息非常混乱 - 不管怎样,我正在努力回答。

首先 - 据我了解 - 你有一个真正的 cronjob 在 unix 机器上激活,它定期(每 5 分钟)执行任务/脚本。

从您的 cron(或从您的脚本中 - 这无关紧要)您可以使用 java -jar ${yourJarName} 命令调用 java 应用程序。

为此,您当然需要正确安装和设置 Java(安装 JRE 并可能设置一些环境变量,例如 JAVA_HOME ).

这样的话Java就能启动成功了。要使其启动并 运行 您的应用程序/ JAR 成功,您的程序需要包含一个有效的 main 方法 。它的签名是 public static void main(args[])没有这种方法Java将无法运行任何应用程序。

在主要方法中,您可以做任何您喜欢的事情 - 例如调用您的 fetchFromSFTP 方法来执行任务。

在上述场景中,调度将由 unix 系统 cron 调度程序

控制

由于您使用了 @Scheduled 注释,因此您可能已经创建了一个 WAR 文件并在 Servlet 容器/应用程序容器中执行它,例如 TomcatWildflyWebsphere Liberty.

这也是可能的,但在这种情况下,您不需要设置和使用 unix 系统 cron 调度程序。由于您的 WAR 文件将在应用程序容器中执行,该应用程序容器本身 运行ning 24/7 并且 Application Containers cron scheduler 将用于执行您的fetchFromSFTP 定期方法。

我希望这对您有所帮助,并为您解决问题。