我正在组装我的第一个商业PHP应用程序,它并不大,因为我仍在热切地学习PHP:)现在我仍处于规划我的应用程序的概念阶段,但我一直遇到一个问题,该应用程序应该由我的客户在他们自己的服务器上自行托管,并且将包含一些非常长的运行脚本,具体取决于每个客户在其应用程序中输入的数据量。现在我想我有两个选择,要么使用cronjobs,例如让一个或多个cronjobs在每个客户可以自己设置的时间运行,要么将整个数据处理作为在后台运行的守护进程。.我的问题是,因为它是一个自托管应用程序(并且每个服务器都不同)...是否建议尝试编写在客户服务器上启动后台进程的php,或者这是您可以做的更多事情只在您自己的
我已经用php编写了一个守护进程,并希望确保它不会泄漏内存,因为它将24/7全天候运行。即使是最简单的形式,守护进程的memory_get_peak_usage也会报告脚本在每个周期消耗更多内存。另一方面,memory_get_usage不会增长。问题是:我应该担心吗?我已经将守护进程剥离到最基本的部分,但这仍在发生。有什么想法吗?#!/usr/bin/php-q最后说明+结论:我最终编写了自己的守护进程包装器,而不是使用pear的system_daemon。不管我如何调整这个库,我都无法阻止它泄漏内存。希望这对其他人有帮助。最后说明+结论2:我的脚本已经投入生产一个多星期了,仍然没有
我正在尝试使用System_Daemon包和CodeIgniter的CLI创建一个守护进程。这对我来说是一个新领域,我正在努力。这是我拥有的:将消息注入(inject)AWSSQS队列的CIController(感谢[url=http://codeigniter.com/forums/member/196201/]coccodrillo[/url]提供了有关如何将AWSSDK集成到CI中的出色说明。参见此处:IntegratingAWSSDKasalibraryinCodeigniter)。一个CIController,它接收队列中的消息并将其写出到日志文件,然后删除队列中的消息。我想
我需要从Web应用程序(php)控制(启动\停止\重新启动)perl守护程序。当我从命令行使用我的初始化脚本(/etc/init.d/foodaemonstart(工作正常))时,守护进程正确启动(并运行),但不工作(守护进程已关闭但pid文件已创建,就好像守护进程在创建后就死了)当我尝试从应用程序启动时。在我的/etc/sudoers中,我添加了apacheALL=NOPASSWD:/etc/init.d/foodaemon在我的php脚本中,$cmd="/usr/bin/sudo/etc/init.d/foodaemonstart";exec($cmd,$out,$ret);我拥有
我已经创建了一个PHP守护程序脚本来持续监视服务器文件系统上特定目录中的新文件,然后处理和归档它们。注意:我使用的是在以下位置提供的php守护程序类:http://www.phpclasses.org/browse/file/8958.html我已经运行了脚本,但我需要一种方法来与守护程序交互并发出命令。例如,一个非常有用的命令是“停止”!:)我目前必须手动终止进程。我在使用控制文件之前已经这样做了(即检查文件中是否有新命令,如果存在则执行它,然后清除文件)。我也使用过套接字,但这个问题并不真正需要任何网络。是否有更好、更优雅或更自然的方式向守护进程发送命令信号?我确实找到了这个:PH
我创建了一个从beanstalkd读取的PHP脚本并处理作业。那里没有问题。我要做的最后一件事就是为它编写一个初始化脚本,这样它就可以作为服务运行。然而,这又给我提出了另一个问题。尝试停止服务时,一种显而易见的方法是尝试终止该进程。但是,如果我这样做,如果PHP脚本处理到一半,作业会怎样?所以作业被保留了,但是脚本从来没有成功或失败(分别删除或埋葬),会发生什么?我的猜测是TTR会过期,然后它会被放回就绪队列吗?还有第二个问题,关于如何更好地管理停止PHP服务的任何提示? 最佳答案 当工作进程(beanstalk客户端)打开与bea
我想检查Gearman守护进程是否正在运行。然后才运行任务,这样我的应用程序就不会崩溃。这是我的代码:$daemonRunning=true;while(true){try{Yii::app()->gearman->client->ping(true);if($daemonRunning===false){echo"Daemonbackonline.Startingsignatureprocess...\n";}Yii::app()->gearman->client->runTasks();}catch(GearmanException$e){echo"Daemonappearstob
我见过很多使用“锁定”文件来跟踪PHP脚本当前是否正在运行的示例。例子:脚本开始检查“/tmp/lockfile”当前是否被锁定如果它被锁定,退出。如果没有,锁定文件并继续这样,如果长时间运行的脚本启动两次,则只有第一个实例会运行。这很棒。但是,绕过它似乎是错误的方法。为什么我们不像这样检查进程是否已经在运行?if(exec("ps-C".basename(__FILE__)."--no-headers|wc-l")>1){echo"Alreadyrunning.";exit;}这种方法有什么潜在的缺陷吗?为什么我经常看到“锁定”文件解决方法?用我们正在寻找的名称来计算进程显然更准确.
我正在尝试通过cli运行这个简单的守护进程functiondoTask(){echo'mytest';}//IncludePEAR'sDaemonClassrequire_once"/usr/share/php/System/Daemon.php";//BareminimumsetupSystem_Daemon::setOption("appName","mydaemonname2");try{//SpawnDeamon!System_Daemon::start();//YourPHPHere!while(true){doTask();}//Stopdaemon!System_Daem
首先-你好,这是我的第一个StackOverflow问题,所以我会尽力正确沟通。我的问题的标题可能有点模棱两可,所以让我立即展开:我正在计划一个项目,该项目涉及从多个“流式”API获取数据输入,Twitter就是一个例子。我有一个用PHP编码的基本脚本,它从命令行无限期运行,从Twitter流API获取输入并用它做非常基本的事情。我的最终目标是让几个这样的进程运行(可能使用SystemDaemonPEAR类进行守护进程),并且我希望能够从一些管理进程(也是一个PHP脚本)中管理它们。我所说的管理是指基本操作,例如停止/启动和(最重要的)自动重启崩溃的进程。如果能就如何最好地处理这个流程