Cron作业和PHP脚本问题

时间:2016-01-24 12:49:12

标签: php cron

我在这里遇到困难,我正在尝试调试。

我有一个剪贴板脚本,它有一个文件锁定以防止多个实例,并且在非cli执行时也有一个块。

我已经将它设置为cron以便每分钟运行一次。剪贴板执行一些数据库功能,并将状态输出到2个文本文件,我使用jquery页面进行监控,所以我看到了现实。

所以我可以看到脚本是空闲还是正在运行,我可以看到最后工作的字符串和详细信息。我还在数据库中检查以查看待处理的否。刮板应该处理的网站。

现在的情况是,我看到待定的号码。网站减少,但检查说脚本是空闲的,并没有任何东西输入2文本文件。

当我尝试ps aux | grep php时,我看到了2行。

root      3159  0.0  0.0   4392   664 ?        Ss   17:57   0:00 /bin/sh -c php /var/www/html/workers/scraper.php
root      3160  0.0  1.5 298100 15824 ?        S    17:57   0:00 php /var/www/html/workers/scraper.php

当我尝试自己运行它时,使用php scraper.php它运行(它不应该,因为文件锁现在应该失败),我得到它。

root      3159  0.0  0.0   4392   664 ?        Ss   17:57   0:00 /bin/sh -c php /var/www/html/workers/scraper.php
root      3160  0.0  1.5 298100 15824 ?        S    17:57   0:00 php /var/www/html/workers/scraper.php
root      3295  0.0  1.4 297852 15208 pts/2    S+   18:11   0:00 php scraper.php

无论如何想法发生了什么?我一直在努力寻找什么错误。简而言之,cron实际上完成了工作并进行了报废,但它并不关心文件锁定或将状态输出到文本文件,这看起来很奇怪。

以下是代码:

<?php
error_reporting(E_ALL);
if(PHP_SAPI !== 'cli' || isset($_SERVER['HTTP_USER_AGENT'])) {
    exit('cli only');
}
//get the site lists.
require_once("writedata.php");
require_once("dbconnect.php");

//set file lock to get script status
$file = fopen("lock.txt","w+");
// exclusive lock
if (flock($file, LOCK_EX | LOCK_NB))
{
    // Grab lock. Continue work.
    echo "Started Running";
//ALL THE MAIN WORK HAPPENS HERE.
$sql = "SELECT site FROM `sites` WHERE status=0 LIMIT 2500";
$result = $db->query($sql);

while($row = $result->fetch_assoc()){
    $site=$row['site'];
    file_put_contents("errors.txt", $site);

//Scrapper functions and parsing functions removed.

}
}
else{
    echo "Script already running";
    exit;
}

0 个答案:

没有答案