我正在构建一个应用程序,允许用户将他们的facebook,twitter,linkedin帐户链接到我的应用程序,而不是通过我的应用程序发布所有这些网站的更新。此外,用户可以“发布日期”状态更新。他们可以设置更新的日期和时间,这将导致更新仅在指定日期发布到请求的站点,而不是立即发布。
我已经通过 cron 作业完成了这项工作,该作业可以提取尚未发布的所有更新(有一个标志指示是否已在DB中发布更新)然后张贴它。我使用cron每分钟运行一次这个过程。
现在我的问题是,如果将足够的更新设置为同一时间,我将遇到PHP最大化执行时间的问题。我的直接工作是获取post_timestamp < current_timestamp
的所有更新并尝试发布它们;因此,如果在某一特定时刻,某些更新尚未发送,则下一个cron运行将尝试发送它,如果它仍在最大执行时间限制内。
我知道这是实现我想要的非常蹩脚的方式。因此,我打算让某种守护进程继续运行并发布所有过时的更新。 实现这一目标的最佳方法是什么?我还需要这个守护进程来处理我正在进行的另一个项目。在这方面的任何帮助将不胜感激......:P
提前致谢。
答案 0 :(得分:0)
Gearman可能就是您所寻找的:http://gearman.org/
答案 1 :(得分:0)
我编写了许多类似的基于PHP的系统 - 长时间运行的进程无法从频繁的Cron作业运行,因为它不能同时运行。
这是一个三阶段的过程。
第二部分很容易。
#!/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脚本的任何其他实例,然后重新启动它,断开与'console'的连接,在后台运行它。