Как убедиться, что скрипт запускается только после другого скрипта - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть два скрипта Python, работающих как cronjobs.

ScriptA обрабатывает файлы журнала и вставляет записи в table, ScriptB использует записи для генерации отчета.

У меня естьорганизовал запуск ScriptA за час до ScriptB, но иногда ScriptB запускается до завершения вставки ScriptA, создавая, таким образом, неверный отчет.

Как убедиться, что ScriptB запускается сразу после завершения ScriptA?

EDIT ScriptA и ScriptB делают очень разные вещи, скажем, одна для сохранения пользовательских данных, другая для внутреннего использования.А где-то еще может быть какой-то ScriptC в зависимости от ScriptA.

Так что я не могу просто объединить эти две работы.

Ответы [ 4 ]

7 голосов
/ 30 ноября 2011

Не лучше ли создать одно задание cron, которое запускает ScriptA, а затем ScriptB? Таким образом, вы можете быть уверены, что ScriptB не запустится до тех пор, пока не завершится работа ScriptA, и вам не нужно изменять ни один скрипт.

Cronjob может запустить простой скрипт оболочки:

#!/bin/sh

python ScriptA.py
python ScriptB.py

Редактировать: Если вы действительно не можете объединить два задания cron, вы можете использовать методику, описанную в этом вопросе , чтобы дождаться завершения первого процесса.

2 голосов
/ 30 ноября 2011

Один из подходов состоит в том, чтобы убедиться, что если эти два задания являются отдельными заданиями cron - между ними будет достаточно времени, чтобы наверняка охватить выполнение задания 1.

Другой подход заключается в блокировке, как предлагали другие,но затем обратите внимание, что cron не будет перезапускать вашу работу только потому, что она завершилась неудачно из-за блокировки.Так что либо job2 придется работать в циклах сна, пока он больше не увидит блокировку, либо наоборот не увидит флаг завершения задания 1, или вам придется проявить творческий подход.

Почему бы незапустить 2-й скрипт из 1-го скрипта после его завершения и сделать его одним заданием cron?

0 голосов
/ 30 ноября 2011

подход, который вы могли бы использовать! имеет некоторый флаг контроля! где-то, например, в БД!

Таким образом, ScriptB просто запускается после установки этого флага! и сразу после его завершения он устанавливает флаг обратно в состояние по умолчанию!

Другой способ, которым вы могли бы реализовать этот подход с использованием флагов, - это использование файловой системы! Как @ Бенджамин предложил!

0 голосов
/ 30 ноября 2011

Заставьте его написать файл и проверьте, существует ли файл.

...