Как запретить запуск скрпита повторно, если он работает?

Monterpan, большой минус твоего предложения в необходимости запускать скрипт из браузера, кроном хрен выполнится запрос через ajax. Так что вопрос от saen был как раз очень даже правильным.

С этим согласен. Я же и написал: "Вообще, есть потребность использовать крон?".

Прежде чем умного из себя строить, проведи бенчмарк хотябы и посмотри что через несколько часов будет с твоим броузером,
а лучше иди почитай матчасть

Извиняюсь если обидел. В следующий раз буду учитывать ваше душевное состояние.
А вы проводили бенчмарк?
Я проводил. 30 часов работало нормально, дальше можете проверить сами.
 
С этим согласен. Я же и написал: "Вообще, есть потребность использовать крон?".



Извиняюсь если обидел. В следующий раз буду учитывать ваше душевное состояние.
А вы проводили бенчмарк?
Я проводил. 30 часов работало нормально, дальше можете проверить сами.

96498616.png

1 запрос не успел отработать, и уже запускаются следующие. Не знаю как ты там что проводил. В следующий раз лучше учитывай свое умственное состояние.
 
96498616.png

1 запрос не успел отработать, и уже запускаются следующие. Не знаю как ты там что проводил. В следующий раз лучше учитывай свое умственное состояние.
Спасибо, я постоянно работаю над своим состоянием ;) .
Можете сбросить свой код файла gen.php, и я вам покажу где ошибка, или сами почитайте jQuery документацию и разберитесь где ошибка.
 
Спасибо, я постоянно работаю над своим состоянием ;) .
Можете сбросить свой код файла gen.php, и я вам покажу где ошибка, или сами почитайте jQuery документацию и разберитесь где ошибка.
Я тебе сам могу сказать где ошибка. Ты тестируешь на ерунде типа
PHP:
echo 'all done';
Предсавь что серверный скрипт серьезнее чем <?echo 'hello world';?> и поставь там задержку по времени в 30 сек. И у тебя сервер будет рвать соединение по таймауту.
Кто тебя вообще учил тестировать приложения? :D
 
Я тебе сам могу сказать где ошибка. Ты тестируешь на ерунде типа
PHP:
echo 'all done';
Предсавь что серверный скрипт серьезнее чем <?echo 'hello world';?> и поставь там задержку по времени в 30 сек. И у тебя сервер будет рвать соединение по таймауту.
отлично. Вы делаете успехи. Посмотрите на строчку выше.
PHP:
//php код действия по таймеру
. Именно сюда, вместо комментария, вставляете ваш серьезный скрипт.
И да, я полностью с вами согласен, что после 30 сек, пора бы уже рвать соединение по таймауту.
 
отлично. Вы делаете успехи. Посмотрите на строчку выше.
PHP:
//php код действия по таймеру
. Именно сюда, вместо комментария, вставляете ваш серьезный скрипт.
И да, я полностью с вами согласен, что после 30 сек, пора бы уже рвать соединение по таймауту.
А я куда по-твоему вставляю?
PHP:
if (isset($_GET['ajax'])) {
    //php код действия по таймеру
    sleep(30);
    echo 'all done';
} else {
Короче я так понял с тобой спорить бесполезно, так что давай каждый при своем мнении останется. Удачи тебе в твоих великих начинаниях :ay:
 
PHP:
class Pid {

    private $file;
    private $running = false;
    private $pids = array();

    function __construct($file, $maxWorkers = 1) 
    {
       
        $this->file = $file;
        if (is_writable(dirname($this->file))) {
            if (file_exists($this->file)) {
                $lines = file($this->file);
                $workers = 0;
                foreach ($lines as $line) {
                    $pid = (int) trim($line);
                    if (posix_kill($pid, 0)) {
                        $workers++;
                        $this->pids[] = $pid;
                    }
                }
                if ($workers>=$maxWorkers) {
                    $this->running = true;
                }
            }
        } else {
            die("Cannot write to pid file '$this->file'. Program execution halted.\n");
        }
       
        if (!$this->running) {
            $this->pids[] = getmypid();
            file_put_contents($this->file, implode("\n", $this->pids));
        }
    }

    public function __destruct() 
    {
        if (!$this->running && file_exists($this->file) && is_writeable($this->file)) {
            $lines = file($this->file);
            $newLines = array();
            foreach ($lines as $line) {
                $pid = (int) trim($line);
                if ($pid!=getmypid() && posix_kill($pid, 0)) {
                    $newLines[] = $line;
                }
            }
            if (count($newLines)) {
                file_put_contents($this->file, implode("", $newLines));
            } else {
                unlink($this->file);
            }
        }
    }

    public function isRunning()
    {
        return $this->running;
    }

    public static function getPid($file, $maxWorkers = 1)
    {
        return new self($file, $maxWorkers);
    }
юзать так:
PHP:
$pid = Pid::getPid($_SERVER['DOCUMENT_ROOT']. '/jobs-execute.pid');
if (!$pid->isRunning()) { 
   CRITICAL CODE
}
Работает ТОЛЬКО под никсами, но у првильных пацанов и хостинг правильный :)
 
Назад
Сверху