【问题标题】:How to implement synchronization between java application and shell script?java应用程序和shell脚本如何实现同步?
【发布时间】:2019-10-25 10:38:11
【问题描述】:

我有一个可以处理 X 个文本文件的 Java 应用程序。当文件处理结束时,它会将文件传输到目标文件夹。

我有一个 bash 脚本,它从目标文件夹中挑选文件并在预定的时间将它们发送到另一台服务器。

我必须在 Java 应用程序和 shell 脚本之间实现同步。有可能吗?

【问题讨论】:

  • 同步是什么意思?你的意思是你想让 shell 脚本在 Java 应用程序完成后运行(简单)?或者它们是否同时运行并且您希望它们以某种方式相互协调(硬)?
  • 这意味着shell脚本不应该开始发送Java应用程序仍在编写过程中的不完整文件。
  • 您可以使用“inotify”来监视目标文件夹中的文件更改
  • 什么样的同步? bash 脚本是否需要知道 Java 应用程序对所有文件都已完成?使应用程序在开始之前创建一个锁定文件,并在完成后将其删除。让脚本检查此文件是否存在。
  • 嗨@Kayaman senario:巴赫处理

标签: java shell synchronization


【解决方案1】:

我必须在 Java 应用程序和 shell 脚本之间实现同步。有可能吗?

您可以做一些隐含的事情,例如:Java 应用程序将一个 marker 文件(如processing-files-now.txt)放入目标目录。只是为了更好地调试,该文件可能包含当前正在处理的文件数。

当 Java 应用程序完成处理后,它可以进来并删除那个 marker 文件。

然后脚本可以检查该文件是否存在(为了不开始传输文件 java 应用程序添加新文件)。

另一方面,真正的问题可能是:java 应用程序在脚本传输文件时启动。如果您真的想避免这种情况,您也可以让 脚本 编写这样的文件。

但请注意,这种“基于文件系统”的同步不太可靠,并且随着时间的推移可能会给您带来各种麻烦。

这真的取决于“规模”。对于小型设置,当两个程序并行工作时,出现严重问题的可能性很小,甚至没有可怕的后果......以上可能会。

但在更真实的场景中,您应该以不同的方式做这些事情。

【讨论】:

  • 如有必要,此标记文件也可以是每个文件的(以便脚本可以发送已经完成的文件,但跳过仍在写入的文件)。或者您可以检查文件的最后修改时间戳,并假设如果 X 分钟内没有任何更改,则说明已完成。
  • @GhostCat 如果我必须在 shell 脚本和 java 应用程序之间实现 IPC,可以吗?
  • @user3559721 Shell 脚本确实不是一个好的成分。我会退后一步,看看以不同的方式做到这一点。但这将是一个更广泛的讨论,这不是这个社区的目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 2012-02-11
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多