0

我有这个 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), 也没有解决它。该方法使用网站的 API 或根据应用程序$trendie->getCandidates执行大量请求 (15-20)。但如前所述,它们通常都会在 30 秒内结束。httpfile_get_contents()

set_time_limit(90);那么......如果运行时间太长,为什么不将其限制为 90 秒?

我将 cron 设置为通过电子邮件向我发送任何输出,当它不起作用时我会收到此消息:

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

1 回答 1

-1

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

#!/bin/sh
pkill -f next_trends

到目前为止,它就像一个魅力!

于 2013-05-17T14:49:20.137 回答