создать задание cron из другого задания cron - PullRequest
0 голосов
/ 25 января 2011

Добрый день всем. Мне нужно сделать это:

  • создать задание cron (здесь нет проблем)
  • cron выполняет скрипт php
  • если какое-то условие выполнено, мне нужно создать еще один крон, используя дату, возвращаемую сценарием

У меня есть root-доступ и все. ОС - это CentOS 5.5 (даже если я не думаю, что это действительно важно, пока поддерживаются кроны)

Чтобы быть более точным, мне нужен cron, который выполняет скрипт php, который получает точный момент времени из базы данных (часы, минуты, секунды), когда нужно выполнить другой скрипт. База данных может быть обновлена ​​в любой момент. Первое задание выполняется один раз каждые 10 минут.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Вы можете просто создать /etc/cron.d/generated файл crontab, в который ваш скрипт добавит сгенерированные записи.

file_put_contents('/etc/cron.d/generated', ' ... entry contents ...', FILE_APPEND');

Как подсказал @The MYYN в своем комментарии, atможет быть хорошим решением, если вы хотите выполнить скрипт только один раз.В PHP вы можете вызвать его так:

system(sprintf('echo %s|at %s',
    escapeshellarg($command),
    escapeshellarg(date('H:i d.m.y', $timestamp))
);

Или вот так:

$fd = popen(sprintf('at %s', escapeshellarg(date('H:i d.m.y', $timestamp))), 'w');
fwrite($fd, $command);
pclose($fd);
0 голосов
/ 25 января 2011

Почему бы не использовать 'в'?

Если я правильно вас понимаю, вы используете скрипт cron для проверки базы данных на выполнение одноразовых заданий - дата / время выполнения задания указываются в базе данных, и если одноразовые задания для выполнения, вы хотите запланировать их, но выполнять их только один раз.

Команды at, batch, atq, atrm управляют пакетной очередью в системах Linux для выполнения одноразовых заданий. Запланируйте задание с помощью 'at', оно запустится, а затем автоматически удалится из буфера 'at'.

...