2012-07-04 3 views
2

Возможно ли запланировать задачу с PHP? например, я хочу выбрать дату с jQuery datepicker и отправить ее. Когда эта дата равна сегодняшней дате, электронное письмо будет отправлено, например (или любой другой скрипт PHP). Дата будет отличаться в зависимости от пользователя, также каждый пользователь может запустить несколько запланированных задач.Планирование задач в PHP без cron

EDIT

ОС Linux, а также веб-сайт размещен на GoDaddy.com Кроме того, это конечные пользователи, которые будут выбирать, когда для выполнения этих задач, поэтому они могут использовать командные строки для этого.

EDIT

Любой Рубин на Rails или Django решений также приветствуются.

+0

BTW, почему он помечен рубиновыми рельсами и django? –

+0

О, черт возьми, я думал, что уже сказал, что любые решения RoR или Django приветствуются! Теперь я отредактирую это. –

ответ

1

Если вы используете сервер Unix, попробуйте at.

http://www.manpagez.com/man/1/at/

Он работает таким же образом, чтобы CRON, что это совершенно отдельный от PHP, и вы должны shell_exec() внешнюю команду. Однако он имеет простой интерфейс командной строки. Как работы cron, at рабочих мест выжить перезагрузки.

Если вы используете at, вам нужно будет написать отдельный скрипт для выполнения задачи, которую вы планируете запланировать.

Пример:

shell_exec("echo 'php script.php' | at -t 201208011234.56"); 

будет работать script.php на 1 августа 2012 года в 12:34:56.

0

Вы можете сделать это без использования cron, просто добавив чек на главную страницу индекса или стандартный файл include - но это только потому, что вы действительно не можете получить доступ к cron (например, к общедоступному хостингу). В этой проверке вы захватите список выдающихся действий и выполнять их, возможно, с помощью

if (time_since_last_run > 5*60) // minutes 
    shell_exec("/usr/bin/php /var/www/check-tasks.php &"); 

Лучшим решением является использование хрон для запуска PHP скрипт, который будет проверять наличие запланированных элементов в вашей системе и их выполнение , Вы можете сделать это через wget или напрямую через вызов PHP.

Один общедоступный хостинг-сайт, который у меня есть, запланирован из другого моего сервера через cron и wget http://othersite.example.com.

пример кронтаб запись:

0 * * * * wget -O - -q -t 1 http://othersite.example.com/cron.php 
1

Вам нужно какой-то процесс на стороне сервера для выполнения задачи в запланированное время.

Популярный подход заключается в том, чтобы хранить информацию о задаче в некоторой базе данных и время от времени выполнять задание cron по проверке очереди задач - это очень надёжно и безопасно.

Невозможно дать лучший ответ без дополнительной информации об окружающей среде, в которой он будет развернут.Например:

  • целевой ОС
  • типа хостинга (посвященный, общий, облака)
  • у вас есть права администратора?
  • Он открыт в Интернете?

Скорее всего, вы не будете в состоянии сделать это в общей среде хостинга, так или иначе, но я должен сказать, что наличие веб-сайта вызова shell_exec не очень мудрым с точки зрения безопасности, так что я бы избежать этого, если сайт подвергается воздействию Интернета.

Хороший хостинг-провайдер должен иметь доступный планировщик фоновых задач, даже если он не является crontab. Если у вашего хостинг-провайдера нет, попытка вытащить какой-то трюк, чтобы заполнить пробел, вероятно, плохая идея.

[обновление]

Как я уже говорил в редактируемой части исходного поста, я разместить его на godaddy.com, и я не могу позволить клиентам запускать эти командные строки и т.д. Есть есть ли решение с другими языками?

Я больше не хожу на godaddy, но у них на панели управления был «диспетчер Cron». Я думаю, что правильная установка goDaddy cron -

/usr/bin/wget -O - -q "http://yoursite.com/cron.php" > /dev/null 2>&1 

в опции Command в диспетчере Cron. Этот «cron.php» проверяет очередь задач, чтобы узнать, есть ли какая-либо электронная почта для отправки (очередь задач является простой таблицей в вашей базе данных, где вы будете записывать любую задачу, запланированную вашими клиентами).

+0

Как я уже сказал в отредактированной части исходного сообщения, я размещаю его на godaddy.com, и я не могу позволить клиентам запускать эти командные строки и т. Д. Есть ли решение с другими языками? –

Смежные вопросы