30秒的cron不会结束执行

时间:2013-05-13 16:06:28

标签: php cron

我有这个Cron(为了便于阅读,分成多行)

8,18,28,38,48,58 * * * * 
/usr/local/bin/setlock 
-n /tmp/cronlock.1618472.147531 sh 
-c $'/home/ryannaddy/trendie.co/get/next_trends'

它运行此文件:

#!/usr/local/php54/bin/php-cgi -q
<?php
set_time_limit(90);
require_once __DIR__ . "/../includes/setup.php";
$db   = new Database();

$lock = (bool)$db->getOne("select get_lock('get_trends', 0)");
// File is already running; don't run again.
if(!$lock){
    echo "Lock Exists\n";
    exit;
}

$trendie = new Trendie();
$trendie->prepare();

$trendie->setNextId();
$trendie->getCandidates();
$trendie->selectFinal();

$db->getOne("select release_lock('get_trends')");

由于某种原因,cron并不总是结束,它可以运行几个小时,但它不应该。平均而言,它成功运行大约30秒,但有时它不会结束,我必须手动登录我的服务器并终止进程以允许它运行。

我试图删除mysql get_lock,但这并没有解决它。我还添加了set_time_limit(90),但也没有修复它。 $trendie->getCandidates方法使用网站的API或http执行大量file_get_contents()次请求(15-20),具体取决于应用程序。但如前所述,它们通常都会在30秒内结束。

所以...如果运行时间过长,为什么不限制为90秒set_time_limit(90);

我有cron设置给我发电子邮件任何输出,当它不起作用时我得到它:

setlock: fatal: unable to lock /tmp/cronlock.1618472.147531: temporary failure

1 个答案:

答案 0 :(得分:-1)

我做了什么,是我创建了另一个cron,一个在此之前运行1分钟的cron,其中包含以下代码:

#!/bin/sh
pkill -f next_trends

到目前为止它已经像魅力一样发挥作用了!