Все знают, что для автоматической работы различных скриптов, их надо как-то запускать, что обычно делается с помошью крона (cron). Допустим у вас есть скрипт, который должен запускаться каждую минуту и что-то делать. Если скрипт выполняется “мгновенно”, то думать не о чем - прописал его в крон и спи спокойно, но если скрипт делает что-то в течении долгого времени, тут появляется пара тонких моментов, которые надо учитывать.
Во-первых, если скрипт не успевает отработать за минуту, то через минуту запустится его вторая копия, ещё черед минуту ещё одна и т.д., пока скрипт не завесит вам сервер. Бороться с этим можно, выставляя какой-нибудь флаг при запущенном скрипте, например создавая какой-то файл. При запуске скрипт смотрит - есть ли файл, и насколько он “свежий”, если файла нет то можно работать, если он есть, но “старый”, то вероятно скрипт запустился, создал файл и вылетел по ошибке, то есть не смог стереть файла, значит опять же можно работать. Если файл есть и он “свежий”, значит запущена копия скрипта и надо просто выйти.
Во-вторых, для более оптимального использования ресурсов, надо прерывать долгий скрипт так, чтобы он выходил (и сбрасывал флаг) ровно перед тем как будет запущена следующая копия. Иначе если у вас скрипт скажем работает по 70 секунд, а запускается из крона каждую минуту, то почти половину времени сервер будет простаивать.
Постоянная ссылка на статью: http://www.maksus.biz/?p=35
