Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在3个独立的java进程之间传递cron作业的值?_Java_Cron - Fatal编程技术网

如何在3个独立的java进程之间传递cron作业的值?

如何在3个独立的java进程之间传递cron作业的值?,java,cron,Java,Cron,我每天早上都在服务器上运行cron作业,它基本上连续运行三个不同的java程序(都有一个main方法),让我把它们命名为P1、P2和P3 第一个流程P1和最后一个流程P3速度非常快,但第二个流程P2有时会耗费大量时间(有时会运行一天以上),因为它执行一些复杂的业务逻辑 业务计算非常复杂,并且基于客户参与该流程的周期性 假设在第一天我必须处理100万客户,因为他们在第一天注册 在第2天我有更少的客户说1000个客户 现在,当第二个进程P2运行时,它将客户机处理详细信息存储在数据库中,状态为PEND

我每天早上都在服务器上运行cron作业,它基本上连续运行三个不同的java程序(都有一个main方法),让我把它们命名为P1P2P3

第一个流程P1和最后一个流程P3速度非常快,但第二个流程P2有时会耗费大量时间(有时会运行一天以上),因为它执行一些复杂的业务逻辑

业务计算非常复杂,并且基于客户参与该流程的周期性

假设在第一天我必须处理100万客户,因为他们在第一天注册

第2天我有更少的客户说1000个客户

现在,当第二个进程P2运行时,它将客户机处理详细信息存储在数据库中,状态为PENDING,因为最后一个进程p3完成时,它将更改为SUCCESS

现在我的问题是:

第1天

  • 流程P1在同一天完成,流程P2在完成后开始
  • 第2天

  • 从第1天开始的进程P2仍在运行,并在数据库中输入详细信息

  • 第2天和第2天开始的所有过程P1P2P3 完成第2天的所有工作

  • 因此,当第2天的最后一个进程P3完成时,第1天的进程P2在数据库中输入的所有先前条目(具有挂起状态)将更新为成功,即使第1天的最后一个进程P3尚未启动

    现在我不希望发生这种情况,即第2天的过程P3在第1天的过程P2之前更新数据库中输入的条目的状态

    我正在努力确定如何解决这个问题

    有一件事我认为应该用数据库条目来显示日期,但是这个过程如何知道要选择哪些日期进行更新呢


    我知道这看起来很混乱。但是,如果我能进一步澄清,请告诉我。

    简单的方法是让P1测试/创建一个标志文件,P3完成后删除标志文件。实际上,最好在运行P1/P2/P3的包装器脚本中执行此操作


    您需要处理的一个复杂问题是可能出现某些故障,给您留下一个标志文件。。。但没有运行P1/P2/P3。可以使用的一个技巧是将(比如)运行包装器脚本的shell的PID存储在标志文件中。然后使用\u文件中的
    kill 0$the \u PID\u检查上一个脚本是否仍然有效。(使用信号为零的
    kill
    命令测试是否存在进程。)

    您能指导我在包装器中处理此问题吗?@Abu-具体来说,您想问什么?您提到最好在包装器脚本中执行此操作,我正在考虑创建一个日期字符串,并将其传递给特定日期的所有三个进程,并将此日期存储在数据库中,以便我可以区分特定日期的记录,因此可以在包装器脚本中进行,或者是否有其他方法可以实现此目的。您可以在脚本中创建一个日期字符串。阅读
    man 1日期
    。此外,您可能还应该阅读有关编写shell脚本的教程。