@memphistofil
Губы в трубочку, нить в иголочку

Несколько cron задач в одно время?

Есть телеграм бот на php в котором могут выполняться какие то отложенные задачи. Отложенные задачи выполняются через cron, следующим образом:
При определенных действиях пользователя, создается запись в кроне
$output = shell_exec('crontab -l');
$newCron = "{$minute} {$hour} * * * /usr/local/bin/php {$cronScriptPath}/cron.php {$taskId}\n";
file_put_contents("/tmp/cron-debug.txt", $output . $newCron);
echo exec('crontab /tmp/cron-debug.txt');

При этом в БД создается запись со строкой, которую мы добавляем в крон файл(для последующего ее удаления).
После того как крон задача срабатывает, запись из крона удаляется:
$output = shell_exec('crontab -l');
$output = str_replace($cronString, "", $output);
file_put_contents("/tmp/cron-debug.txt", $output);
echo exec('crontab /tmp/cron-debug.txt');

Проблема возникает, когда необходимо выполнить две задачи в один момент. Например когда два пользователя взаимодействуют друг с другом и в результате этого действия им нужно отправить по сообщению. В этом случае в кроне остается не удаленной одна из задач.
Пробовал добавлять блокировку на чтение/запись файла, не помогает.
Вопрос по большому счету в том, как сделать подобную систему по нормальному, так как чувствую, что мой вариант с кроном больше похож на костыль. Но за предложения, с тем как пофиксить мой вариант, буду тоже благодарен.
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Сделайте таблицу в БД.
По крону каждую минуту проверяйте записи и выполняйте их.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы