Существует ли идентификатор выполнения скрипта php?
PHP скрипт, запускаемый через Cron, устанавливает на определенные записи в таблице MySQL флаг, что они обрабатываются (меняет булевское значение через UPDATE на случай, если не успеет отработать до того как Cron запустит скрипт еще раз). В случае, если выполнение скрипта будет прервано, записи могут остаться заблокированными. Есть ли какой-то идентификатор php, чтобы можно было записать его для таких записей и потом проверить, ведется обработка, или выполнение скрипта прервано?
К примеру, писать туда время начала работы скрипта. Если скрипт дёргается только через cron и никак иначе, то достаточно брать кол-во секунд (функция time) - два раза в одну и ту же секунду скрипт запущен не будет. Заодно при таком подходе можно реализовать истечение блокировок (записи, заблокированные более давно, чем N секунд назад, условно считать незаблокированными)
Спасибо, действительно, если взять абстрактное время обработки одной записи * на количество, то получим примерное максимальное время, когда должна быть освобождена. Буду писать сразу время окончания блокировки записи при установке флага блокировки.
Стандартный способ - не просто указать что "скрипт работает", а сохранить идентификатор процесса этого скрипта.
Таким образом, вы сможете не только увидеть аттрибут, что "скрипт работает", а считать PID и проверить - есть ли такой процесс в памяти, и является ли он именно вашим php скриптом.
alexanderks7, Так по PID можно проверить его cmdline какой именно скрипт выполняется.
Во-вторых PID достаточно долго ротейтится.
Для некритичных задач, которые если что запустятся еще раз через 10 минут, можно и не проверять (ну крутится другой скрипт, ну он же тоже завершится до следующей итерации)
по какой причине? Если ошибки, то это решается через try catch. Поймали ошибку - записали, что была ошибка, а еще лучше инкрементировали количество ошибок и записали текст ошибки, что бы ручками потом разобраться.
Да, ошибки обработаю в try catch finally, просто сайт будет работать на Bitrix VM у клиента, есть вероятность что отключат свет и сервер упадет во время обработки.