[PHP] Как запретить повторное выполнение скрипта?

[Удален]
3043

Есть скрипт занесения данных в базу MYSQL, но дело в том, он по крону поставлен на выполнение раз в час. Но почему то запускается бывает по 2-3 раза одновременно, в связи с чем данные заносятся одинаковые и создаются дубли.

Как запретить одновременный запуск скрипта?

dkameleon
На сайте с 09.12.2005
Offline
386
#1
riasv:
он по крону поставлен на выполнение раз в час. Но почему то запускается бывает по 2-3 раза одновременно, в связи с чем данные заносятся одинаковые и создаются дубли.

покажите строку запуска из крона, для начала.

Дизайн интерьера (http://balabukha.com/)
lutskboy
На сайте с 22.11.2013
Offline
186
#2

странный крон

тогда создайте поле тайм. туда пишем текущее время и вставляем данные

а при повторе проверяем время

если меньше часа как указано в кроне то не делаем вставку в бд

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#3
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#4

1. Дайте угадаю Через wget запускаете?

Надо ограничить количество повторов запроса скрипта самим wget:

wget -O /dev/null -q -t 1 http://site.ru/cron.php

2. В самом скрипте в начале сделать создание блокировочного файла, например cronstart.dat

После выполнения скрипта удалять этот файл. Ну и конечно же сделать проверку, чтобы скрипт не запускался, если этот файл есть, можно также добавить проверку времени созданного файла, если больше 2-х часов, то удалять файл "насильно" и запускать файл.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
[Удален]
#5
LEOnidUKG:
1. Дайте угадаю Через wget запускаете?
Надо ограничить количество повторов запроса скрипта самим wget:
wget -O /dev/null -q -t 1 http://site.ru/cron.php

2. В самом скрипте в начале сделать создание блокировочного файла, например cronstart.dat
После выполнения скрипта удалять этот файл. Ну и конечно же сделать проверку, чтобы скрипт не запускался, если этот файл есть, можно также добавить проверку времени созданного файла, если больше 2-х часов, то удалять файл "насильно" и запускать файл.

Да, запускаю вот так: /usr/bin/wget -O /dev/null http://****.ru/script.php

Спасибо, попробую ваш вариант

C
На сайте с 26.10.2013
Offline
54
#6

добавляете поле busy в mysql

при запуске скрипта ставите его в 1

при завершении - в ноль

можно не 1 и 0, а time stampt

Соответственно, смотрите - если от предыдущего запуска прошло больше 58, скажем, минут - проводим манипуляции ( ну или 1, в паре 1-0 )

Услуги по парсингу данных (/ru/forum/939826), единоразовый и регулярный сбор данных. Любые объемы. Скрипты на PHP, создание и доработка, решение проблем с сайтами Пишите в личные сообщения или скайп
Lord Maverik
На сайте с 15.04.2003
Offline
471
#7

Я сделал так (критика приветствуется):

В начале скрипта:


$lockfile = 'billing.lock';
if (file_exists($lockfile)){
echo 'Скрипт уже запущен. Создан файл: '.$lockfile;
die();
}
register_shutdown_function('shutdown');
$ch = fopen($lockfile, 'w');

В конце скрипта:

function shutdown(){
global $ch;
fclose($ch);
unlink($lockfile);
}

shutdown();
RedMall.Ru (https://redmall.ru) - Товары из Китая (Таобао, Tmall) с проверкой качества, скидка для форумчан 7% Партнерская программа 2 уровня: 5% + 5%. Подробнее. (https://redmall.ru/about/partner/)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий