У меня есть сценарий, который запускается каждый час, и без использования базы данных я хотел бы проверить, работает ли этот файл: (1) в данный момент; (2) уже завершено; или (3) еще не запущен. Если №3, то запускаю, иначе пропускаю. Что было бы хорошим способом отслеживать это вне базы данных? Например, я подумал:
MyApplicationFolder/
script.py
proc/
running/
$pid_$integrity_field
completed/
$integrity_field
Таким образом, когда я запустил сценарий, я мог:
running/*
). И если он уже запущен, я могу получить идентификатор процесса (на случай, если мне нужно отправить ему сигнал).completed/*
).Является ли это чем-то вроде стандартного подхода к этому или может быть лучший или более стандартизированный способ реализации этого подхода (опять же, без использования БД для его отслеживания)?
(1) в настоящее время работает; (2) уже завершено; или (3) еще не запущен.
Если ваш планировщик достаточно хорош (см. cron(8)
и systemd.timer(5)
), и ваш сценарий достаточно эффективен, я думаю, вам не нужно проверять, запущен ли он уже в текущий час, кроме, конечно, если ваш сценарий может работать более одного часа.
Это что-то вроде стандартного подхода к этому?
Ты можешь использовать lockfile(1)
сделать это, или может быть py-filelock
если вы хотите сделать это в своем скрипте Python, а не в своей команде bash.
(3) еще не запущен
lockfile(1)
поведение по умолчанию - повторная попытка получения блокировки каждые 8 секунд, поэтому ваш сценарий может подождать, запустить и затем удалить файл блокировки, если ваш сценарий не запускался в течение текущего часа.