用于跟踪 proc/ 中正在运行/已完成脚本的结构

用于跟踪 proc/ 中正在运行/已完成脚本的结构

我有一个每小时运行一次的脚本,如果不使用数据库,我想检查该文件是否:(1) 当前正在运行;(2) 已完成;或 (3) 尚未运行。如果是 #3,则运行它,否则跳过它。在数据库之外跟踪此问题的最佳方法是什么?例如,我在想:

MyApplicationFolder/
  script.py
  proc/
    running/
      $pid_$integrity_field
    completed/
       $integrity_field

这样,当我运行脚本时我可以:

  • 检查它当前是否正在运行(如果 integrity_field 在 中running/*)。如果它已经在运行,我可以获取 processID(以防我需要向它发送信号)。
  • 检查它是否已经完成(如果 integrity_field 在completed/*)。

这是否类似于执行此操作的标准方法,或者是否有更好或更标准化的方法来执行此方法(再次,不使用数据库来跟踪它)?

答案1

(1)目前正在运行;(2)已经完成;或(3)尚未运行。

如果你的调度程序足够好(请参阅cron(8)systemd.timer(5)),并且您的脚本足够高效,我认为您不需要检查它是否已经在当前时间运行,当然除非您的脚本可以运行一个多小时。

这是否类似于执行此操作的标准方法

您可以使用lockfile(1)这样做,或者py-filelock如果您想在 Python 脚本中而不是在 bash 命令中执行此操作。

(3)尚未运行

lockfile(1)的默认行为是每 8 秒重试获取锁,因此如果您的脚本在当前小时内尚未运行,则您的脚本可以等待、运行,然后删除锁文件。

相关内容