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

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

посмотрите, в сторону следующего способа:
"
- вы запускаете javascript таймер,
- который дергает нужный вам php скрипт, ($.load("/ваш_пхп_скрипт.php");)
- после выполнения данного скрипта,
- запускается новый js таймер, который дергает скрипт снова."
 
Monterpan
дело предложил так тоже можно
яже рекомендую не создавать удалять файл а иметь отдельный файл с нужной текстовой инфой внутри в формате например
Код:
1|timestamp
если текущий timestamp больше выдранного из файла на нужную величину то запускаем и игнорируем проверку 0-1
если 1 то не запускаем, если 0 то запускаем
 
Вообще, есть потребность использовать крон?

посмотрите, в сторону следующего способа:
"
- вы запускаете javascript таймер,
- который дергает нужный вам php скрипт, ($.load("/ваш_пхп_скрипт.php");)
- после выполнения данного скрипта,
- запускается новый js таймер, который дергает скрипт снова."
1) в яваскрипте функции таймера работают асинхронно.
2) где ты собираешься запускать яваскрипт?

Добавлено через 1 минуту
Monterpan
дело предложил так тоже можно
яже рекомендую не создавать удалять файл а иметь отдельный файл с нужной текстовой инфой внутри в формате например
Код:
1|timestamp
если текущий timestamp больше выдранного из файла на нужную величину то запускаем и игнорируем проверку 0-1
если 1 то не запускаем, если 0 то запускаем
А если скрипт по какой-то причине не сможет записать информацию в файл, но при этом все предыдущие операции выполнятся успешно?
 
ну так тогда старая временная метка будет сохранена в файле и по прошествии нужного количества времени скрипт запустится по первому условию даже не проверяя есть 0 или нет.

всё очень легко делается на уровне
файлгет и файлпут контент
 
1) в яваскрипте функции таймера работают асинхронно.
2) где ты собираешься запускать яваскрипт?
Saen, я совсем не понимаю ваших вопросов... Вы наверное, на javascript и php не программировали раньше?
Вот набросал код файла jscronphp.php, который постоянно дергает php код через 3 секунды после предыдущего выполнения.
PHP:
<?php
if (isset($_GET['ajax'])) {
	//php код действия по таймеру
	echo 'all done';
} else {
?>
<html>
<head>
<title>получение</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script></head>
<body>
<script type="text/javascript">
var timerOnce;
function runOnce() {
$("#ajax_result").load("/jscronphp.php?ajax=true", function() {
	timerOnce = window.setTimeout("runOnce();", 3000);
});
}
$(document).ready(function(){ 
	timerOnce = window.setTimeout("runOnce();", 1000);
});
</script>
<div id="ajax_result"></div>
</body>
</html>
<?php
}
?>
 
Вообще, есть потребность использовать крон?
посмотрите, в сторону следующего способа:
"
- вы запускаете javascript таймер,
- который дергает нужный вам php скрипт, ($.load("/ваш_пхп_скрипт.php");)
- после выполнения данного скрипта,
- запускается новый js таймер, который дергает скрипт снова."

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

Добавлено через 2 минуты
ну так тогда старая временная метка будет сохранена в файле и по прошествии нужного количества времени скрипт запустится по первому условию даже не проверяя есть 0 или нет.
всё очень легко делается на уровне
файлгет и файлпут контент


Вот пример
PHP:
<?php
$pid=getmypid();

$file = file("pid.txt");
if($pid != $file[0])  {
 echo "Дергаем  и записываем $pid";
 echo "else PID".$pid."file".$file[0];
  $fout2 = fopen("pid.txt",'w+');
fwrite($fout2,$pid);
 fclose($fout2);   }
 else  {     echo "Процесс $pid еще работает";
exit();
 }

?>

код работает PID создается. условия выполняются.
Но!
Если к примеру в парсере этот код использовать
то не хочет работать.
 
А если скрипт еще не отработал?
Вся сложность в том чтобы не запустить второй раз один и то т же скрипт, если он еще работает.

используйте код из моего примера выше.
Он выполняется постоянно через 3 секунды только после окончания выполнения предыдущей версии скрипта.
 
используйте код из моего примера выше.
Он выполняется постоянно через 3 секунды только после окончания выполнения предыдущей версии скрипта.

Сегодня попробую ваш код.

к стати вот код
раньше он работал
а щас даже незнаю работает ли он

<?
$filename = 'vb.org/r.php';
exec("ps -auxww | grep $filename | grep -v grep",$output,$code);
if($code!=0 && $code!=1)
{
trigger_error("Unable to 'ps -auxww | grep $filename | grep -v grep'. Error code: $code<br>",E_USER_ERROR);
}
if(count($output)>1) {
echo 'еще работает- ';
echo date('h:i:s') . "\n";
print_r($output);
}
else {
echo 'запускаем новый процесс - ';
echo date('h:i:s') . "\n";
print_r($output);
}

unset($output);
 
Monterpan, большой минус твоего предложения в необходимости запускать скрипт из браузера, кроном хрен выполнится запрос через ajax. Так что вопрос от saen был как раз очень даже правильным.
 
Saen, я совсем не понимаю ваших вопросов... Вы наверное, на javascript и php не программировали раньше?
Конечно нет, куда мне до таких высоких технологий. А ты видимо не в курсе про утечки в памяти при цикличном выполнении яваскрипта в броузере, особенно когда работает eval а в твоем коде
Код:
[COLOR=#000000]setTimeout("runOnce();", 3000);[/COLOR]

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

Обе функции для работы с интервалами времени setTimeout и setInterval могут принимать строку в качестве первого аргумента. Эта строка всегда будет выполняться в глобальной области видимости, поскольку eval в этом случае вызывается не напрямую.

Проблемы с безопасностью

Кроме всего прочего, функция eval — это проблема в безопасности, поскольку исполняется любой переданный в неё код; никогда не следует использовать её со строками из неизвестных или недоверительных источников.

Заключение

Никогда не стоит использовать eval: любое применение такого кода поднимает вопросы о качестве его работы, производительности и безопасности. Если вдруг для работы вам необходим eval, эта часть должна тут же ставиться под сомнение и не должна использоваться в первую очередь — необходимо найти лучший способ , которому не требуются вызовы eval.
 
Назад
Сверху