@burov0798
Пытаюсь изучать php\js

Правильно ли организовал работу flock?

Правильно ли организовал защиту от одновременного запуска php скрипта по cron?
$lock = sys_get_temp_dir()."/test.lock";
    $aborted = file_exists($lock) ? filemtime($lock) : null;
    $fp = fopen($lock, 'w');

    if (!flock($fp, LOCK_EX|LOCK_NB)) {
         exit( 'already running' );
    }

 // Тут код скрипта

    // снятие блокировки по окончанию работы 
    // если этот callback, не будет выполнен, то блокировка 
    // все равно будет снята ядром, но файл останется
    register_shutdown_function(function() use ($fp, $lock) {
        flock($fp, LOCK_UN);
        fclose($fp);
        unlink($lock);
    });

Если я теперь поставлю скрипт test.php на cron, то если скрипт еще работает, то крон его не выполнит, так?
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вообще да, правильно.
Но наличие lock-файла может говорить не только о том, что скрипт был "убит" но и потому, что он сейчас работает.
Рекомендую сохранить pid в этот файл и проверять, что процесс с этим pid существует.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы