【问题标题】:Strategy for handling user input as files将用户输入作为文件处理的策略
【发布时间】:2011-02-23 07:50:26
【问题描述】:

我正在创建一个脚本来处理用户提供给我们的文件。一切都发生在同一个 UNIX 系统中(在 Solaris 10 上运行)

现在我们的设计是这样的

  1. 用户将文件放入上传目录
  2. 放置在 cron 上的脚本每 10 分钟运行一次。
  3. 脚本在上传目录中查找文件,对其进行处理,然后立即删除

由于历史/遗留原因,#1 无法更改。此外,需要在处理后删除文件。

我主要关心的是并发性。很可能会出现在仍在写入输入文件时运行分析脚本的情况。在这种情况下,数据将丢失,这(显然)是不可接受的。

由于我们无法控制用户选择的放置输入文件的方式,因此我们不能要求他们获得文件锁定。据我了解,文件锁仅在 UNIX 上是建议。因此,用户必须选择遵守它们。

我正在寻找有关处理此问题的最佳做法的建议。谢谢

【问题讨论】:

    标签: unix file concurrency


    【解决方案1】:

    显然,所有最佳解决方案都涉及客户端提供某种触发器,表明它已完成上传。这可能是第二个文件,在将文件写入阶段目录后将文件原子移动到处理目录,或 REST Web 服务。我假设您无法控制您的客户,并且无法或不愿意改变他们的任何事情。

    在这种情况下,您仍然有几个选择:

    • 您可以使用非常简单的启发式方法:检查文件大小,等待 5 秒,然后检查文件大小。如果它没有改变,它可能会很好。

    • 如果您有超级用户权限,您可以使用lsof 确定是否有人打开此文件以供写入。

    • 如果您有权访问处理上传的东西(HTTP、FTP、复制文件的 setuid 脚本?),您当然可以在其中放置触发器。

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多