Как определить что время истекло?
Доброго дня.
Как раз через Крон самый вариант.

Вам не обязательно делать "кучу" запросов - SQL язык достаточно мощный и можете за один раз выбрать всю интересующую информацию. 

Раз в секунду вовсе не обязательно. Если "3 дня на проверку", то достаточно проверять раз в час, или раз в сутки вообще (смотря с какой точностью Вам надо).

Сомневаюсь, что у Вас будет столь "высоконагруженный" сервис, что бы обработка хотя бы 1000 позиций заняло сколь нибудь существенное время.
 Если всё таки по каким-то причинам не хватает 30 секунд на  выполнение скрипта и реально "существенная" нагрузка - обрабатывайте порциями (одним запросом выгружаете всё, что нужно обработать, ставите флаг, что не запускать до конца обработки, а потом уже обрабатываете 100 штук за раз, а после снимаете флаг), либо переписываете код по-нормальному и оптимизируете, либо создаёте кластер серверов и распределяете задания, но это совсем другая история.  Думаю, принцип понятен.
Доброго дня.
Как раз через Крон самый вариант.

Вам не обязательно делать "кучу" запросов - SQL язык достаточно мощный и можете за один раз выбрать всю интересующую информацию. 

Раз в секунду вовсе не обязательно. Если "3 дня на проверку", то достаточно проверять раз в час, или раз в сутки вообще (смотря с какой точностью Вам надо).

Сомневаюсь, что у Вас будет столь "высоконагруженный" сервис, что бы обработка хотя бы 1000 позиций заняло сколь нибудь существенное время.
 Если всё таки по каким-то причинам не хватает 30 секунд на  выполнение скрипта и реально "существенная" нагрузка - обрабатывайте порциями (одним запросом выгружаете всё, что нужно обработать, ставите флаг, что не запускать до конца обработки, а потом уже обрабатываете 100 штук за раз, а после снимаете флаг), либо переписываете код по-нормальному и оптимизируете, либо создаёте кластер серверов и распределяете задания, но это совсем другая история.  Думаю, принцип понятен.