很好地停止齿轮工人
我有许多Gearman工人不断运行,保存诸如用户页面浏览记录之类的东西。有时,我会更新 Gearman worker 使用的 PHP 代码。为了让工人切换到新代码,我为工人杀死了PHP进程并重新启动了PHP进程。
什么是更好的方法来做到这一点?据推测,当我杀死其中一个工作进程时,我有时会丢失数据(尽管不是非常重要的数据)。
编辑:我找到了一个适合我的答案,并在下面发布。
我有许多Gearman工人不断运行,保存诸如用户页面浏览记录之类的东西。有时,我会更新 Gearman worker 使用的 PHP 代码。为了让工人切换到新代码,我为工人杀死了PHP进程并重新启动了PHP进程。
什么是更好的方法来做到这一点?据推测,当我杀死其中一个工作进程时,我有时会丢失数据(尽管不是非常重要的数据)。
编辑:我找到了一个适合我的答案,并在下面发布。
通常,我使用带有 -r 标志的 unix 守护程序实用程序运行我的 worker,并让他们在一个作业后过期。您的脚本将在每次迭代后正常结束,守护程序将自动重新启动。
您的员工将因一项工作而陈旧,但这对您来说可能不像丢失数据那么重要
该解决方案还具有释放内存的优点。如果你正在做大量的工作,你可能会遇到内存问题,因为PHP pre 5.3有可怕的GC。
您还可以向退出脚本的所有工作线程添加 quit 函数。当您想重新启动时,您只需拨打齿轮师电话即可以高优先级退出。
function AutoRestart() {
static $startTime = time();
if (filemtime(__FILE__) > $startTime) {
exit();
}
}
AutoRestart();