Процесс демона PHP для отправки обновленных обновлений статуса в Facebook, Twitter и т. Д. - PullRequest
1 голос
/ 27 августа 2010

Я создаю приложение, которое позволяет пользователям связывать свои аккаунты в facebook, twitter, linkedin с моим приложением, а затем публиковать обновления на всех этих сайтах через мое приложение. Кроме того, пользователь может обновлять статус после публикации. Они могут установить дату и время для своего обновления, что приведет к публикации обновления на запрошенных сайтах только в указанную дату, а не сразу.

У меня это нормально работает с заданием cron , которое извлекает все обновления, которые еще не были опубликованы (есть флаг, указывающий, было ли обновление опубликовано или нет в БД), а затем публикует Это. Я запускаю этот процесс каждую минуту, используя cron. Теперь моя проблема в том, что при достаточном количестве обновлений, установленных в то же время, у меня будут проблемы с тем, чтобы PHP максимально увеличивал время выполнения. Моя непосредственная работа заключалась в том, чтобы получить все обновления, которые имеют post_timestamp < current_timestamp, и попытаться опубликовать их; так что если в течение определенной минуты некоторые обновления не были отправлены, при следующем запуске cron попытается отправить его, если он все еще находится в пределах максимального времени выполнения.

Я знаю, что это очень неудачный способ добиться того, чего я хочу. Поэтому я планирую запустить какой-нибудь демон-процесс, который будет продолжать работать и публиковать все последующие обновления. Каков наилучший способ достижения этого? Мне также нужен этот подход демона для другого проекта, над которым я работаю. любая помощь в этом отношении будет принята с благодарностью ...: P

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Я написал несколько систем на основе PHP, которые выполняют похожие функции - долго выполняющиеся процессы, которые нельзя запускать из частых заданий Cron, поскольку нельзя одновременно запускать их.

Этотрехэтапный процесс.

  1. Первоначальный сценарий запускается по требованию или при перезапуске сервера (см. vixie-cron @ reboot ).Это просто вызывает 2-ую часть.
  2. Скрипт зацикливания, который вызывает ваш PHP-скрипт для отправки всех действий, которые должны, но еще не отправлены
  3. Сценарий для отправки контента из базы данных.

2-я часть этого довольно проста.

#!/bin/sh
# this file is runSocialSend.sh

BASEURL=http://alister.example.com
URL=$BASE/path/actions/send-to-social-sites.php
# don't store the output
WGET="/usr/bin/wget  -O /dev/null -- "
# wait this many seconds between runs
SLEEP=20

# could also just run it from the CLI - php -f ..../send-to-social-sites.php
$WGET $URL
sleep $SLEEP
# and loop round again to restart...
exec $0

Первая часть для правильного выполнения вышеописанного еще проще.

#!/bin/sh

killall runSocialSend.sh
nohup ./runSocialSend.sh > /dev/null &

Буквально убитьлюбые другие экземпляры сценария runSocialSend.sh, а затем перезапустите его, отключившись от «консоли», запустив его в фоновом режиме.

0 голосов
/ 27 августа 2010

Gearman, вероятно, то, что вы ищете: http://gearman.org/

...