Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP守护进程向Facebook、Twitter等提交最新状态更新_Php_Cron_Daemon - Fatal编程技术网

PHP守护进程向Facebook、Twitter等提交最新状态更新

PHP守护进程向Facebook、Twitter等提交最新状态更新,php,cron,daemon,Php,Cron,Daemon,我正在构建一个应用程序,允许用户将他们的facebook、twitter、linkedin帐户链接到我的应用程序,然后通过我的应用程序向所有这些网站发布更新。此外,用户还可以“发布日期”状态更新。他们可以设置更新的日期和时间,这将导致更新仅在指定日期发布到请求的站点,而不是立即发布到请求的站点 我使用cron作业可以很好地完成这项工作,该作业提取所有尚未发布的更新(有一个标志指示更新是否已在数据库中发布),然后发布。我使用cron每分钟运行一次这个过程。 现在我的问题是,如果同时设置了足够多的更

我正在构建一个应用程序,允许用户将他们的facebook、twitter、linkedin帐户链接到我的应用程序,然后通过我的应用程序向所有这些网站发布更新。此外,用户还可以“发布日期”状态更新。他们可以设置更新的日期和时间,这将导致更新仅在指定日期发布到请求的站点,而不是立即发布到请求的站点

我使用cron作业可以很好地完成这项工作,该作业提取所有尚未发布的更新(有一个标志指示更新是否已在数据库中发布),然后发布。我使用cron每分钟运行一次这个过程。 现在我的问题是,如果同时设置了足够多的更新,我会遇到PHP最大化执行时间的问题。我的直接工作是获取所有具有
post_timestamp
的更新,并尝试发布它们;因此,如果在特定的一分钟内,某些更新尚未发送,则下一次cron运行将尝试发送它,如果它仍在最大执行时间限制内

我知道这是一个非常蹩脚的方式来实现我想要的。因此,我计划有一个守护进程,持续运行并发布所有过期的更新。 实现这一目标的最佳方式是什么?我还需要为我正在从事的另一个项目使用这个守护进程方法。在此方面的任何帮助都将不胜感激……:P


提前感谢。

Gearman可能就是您想要的:

我已经编写了许多基于PHP的系统,它们可以做类似的事情-长时间运行的进程不能从频繁的Cron作业中运行,因为它不能并发运行

这是一个三阶段的过程

  • 初始脚本按需运行,或在服务器重新启动时运行(请参阅)。这就叫第二部分
  • 一个循环脚本,它调用PHP脚本来发送所有到期但尚未发送的操作
  • 用于从数据库发送内容的脚本
  • 第二部分很简单

    #!/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脚本的任何其他实例,然后重新启动它,断开与“控制台”的连接,在后台运行它