Назад | Перейти на главную страницу

Структура для отслеживания запущенных / завершенных скриптов в proc /

У меня есть сценарий, который запускается каждый час, и без использования базы данных я хотел бы проверить, работает ли этот файл: (1) в данный момент; (2) уже завершено; или (3) еще не запущен. Если №3, то запускаю, иначе пропускаю. Что было бы хорошим способом отслеживать это вне базы данных? Например, я подумал:

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

Таким образом, когда я запустил сценарий, я мог:

Является ли это чем-то вроде стандартного подхода к этому или может быть лучший или более стандартизированный способ реализации этого подхода (опять же, без использования БД для его отслеживания)?

(1) в настоящее время работает; (2) уже завершено; или (3) еще не запущен.

Если ваш планировщик достаточно хорош (см. cron(8) и systemd.timer(5)), и ваш сценарий достаточно эффективен, я думаю, вам не нужно проверять, запущен ли он уже в текущий час, кроме, конечно, если ваш сценарий может работать более одного часа.

Это что-то вроде стандартного подхода к этому?

Ты можешь использовать lockfile(1) сделать это, или может быть py-filelock если вы хотите сделать это в своем скрипте Python, а не в своей команде bash.

(3) еще не запущен

lockfile(1)поведение по умолчанию - повторная попытка получения блокировки каждые 8 ​​секунд, поэтому ваш сценарий может подождать, запустить и затем удалить файл блокировки, если ваш сценарий не запускался в течение текущего часа.