если я правильно понял исходные данные, то вам нужно две вещи — сервер очередей и часы =)
Рекомендую beanstalkd и следующую схему работы
— сервер (приложение, занимающееся обработкой задач) запущен ВСЕГДА. Он слушает очередь в beanstalkd в ожидании задачи
— клиент помещает в очередь задание со временем исполнения
— сервер при получении задания форкается, дочерний процесс ждет наступления указанного в задаче времени, и запускает задачу на выполнение
— после выполнения задачи она удаляется из очереди. В случае преждевременной кончины процесса сервера, задания упадут обратно в очередь beanstalkd