0

cPanelにアクセスできないため、「cronジョブ」などを実行する必要がありました

このcronジョブクラスの私のロジックは、誰かがウェブサイトから何かをヒットしたとき、時間を確認してクラスを呼び出すというものでした.

...それで....

これが私のcronJobのクラスです。私の問題は、クラスを2回または3回呼び出すことがあることです..(おそらく、2人以上のユーザーの現在の時刻は同じです...

<?php
class cronJob extends Core {
    public function execute() {
        include("interfaces/cronJob.php");
        $items = $this->query("SELECT `id`, `class`, `interval`, `time` FROM `cron_job`");
        while($item = $this->fetch($items))
        {
            if($this->getTime() > $item['time']) {
                $this->query("UPDATE `cron_job` SET `time` = '".($this->getTime() + $item['interval'])."' WHERE `id` = '".$item['id']."'");
                $this->getLog("cronJob: ".$this->getTime()." Class: ".$item['class']);

                include_once("cron/".$item['class'].".php");
                $job = new $item['class'];
                $job->run();
            } 
        }
    }
}
?>

...そして...ここに時間関数があります(私はそれが必要だとは思いません:P)

public function getTime() {
    return time() + 305;
}

ログ:

2013-04-14 12:59:02 - cronJob: 1365890342 Class: updateFiles
2013-04-14 12:59:37 - cronJob: 1365890377 Class: updateTrivia
2013-04-14 01:00:13 - cronJob: 1365890413 Class: updateTrivia
2013-04-14 01:00:49 - cronJob: 1365890449 Class: updateTrivia
2013-04-14 01:01:25 - cronJob: 1365890485 Class: updateTrivia
2013-04-14 01:02:01 - cronJob: 1365890521 Class: updateTrivia
2013-04-14 01:02:37 - cronJob: 1365890557 Class: updateTrivia
2013-04-14 01:03:13 - cronJob: 1365890593 Class: updateTrivia
2013-04-14 01:03:49 - cronJob: 1365890629 Class: updateTrivia
2013-04-14 01:04:25 - cronJob: 1365890665 Class: updateTrivia
2013-04-14 **01:05:01** - cronJob: 1365890701 Class: updateTrivia
2013-04-14 **01:05:01** - cronJob: 1365890701 Class: updateTrivia

テーブル:

ここに画像の説明を入力

だから...誰かがそれを修正する考えを持っていますか?

4

2 に答える 2

0

次のことを試みることができます。

  • データベースを使用してブロックします: たとえば、テーブルをロックしてトランザクションを開始します (注意、MyISAM エンジンではオプションを利用できません)。
  • ファイルからの書き込みと読み取り。ファイルの内容が != "x" の場合、更新をスキップします。
于 2013-04-13T22:29:02.363 に答える