我有一个每小时运行一次的脚本,如果不使用数据库,我想检查该文件是否:(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 秒重试获取锁,因此如果您的脚本在当前小时内尚未运行,则您的脚本可以等待、运行,然后删除锁文件。