как узнать запущен ли процесс php?

seosniks
На сайте с 13.08.2007
Offline
389
7095

Добрый вечер.

Можно ли узнать работает ли запущенный ранее процесс PHP

Например Крон запускает файл s.php

один раз в 30 минут, но если файл не отработал, буудет запущен новый процесс.

Можно ли узнать как нибудь работает ли еще процесс, и если работает то отработать в холостую

пример

      $filename = 's.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);
exit;
}

if(count($output)>1) {
echo 'Скрипт все еще работает - ';
echo date('h:i:s') . "\n";
print_r($output);
exit;
}

только что то не хочет пахать.

[umka]
На сайте с 25.05.2008
Offline
456
#1

Попробуйте прописать полные пути к командам ps, grep и что там у вас ещё :)

Лог в помощь!
ДП
На сайте с 23.11.2009
Offline
203
#2

вопрос у вас, конечно, по другому сформулирован, но в линуксе есть вот такая команда: http://www.unix.com/man-page/linux/1/flock/ , еще в комментах тут:http://habrahabr.ru/blogs/linux/114622/

Ну и как самопальный вариант - в скрипте создавать в начале файлик, в конце стирать, а при запуске проверять его наличие.

Антон Лавеев
На сайте с 31.10.2005
Offline
425
#3

Дикий пионер, хороший ник у Вас :)

Дикий пионер:
в скрипте создавать в начале файлик, в конце стирать, а при запуске проверять его наличие.

А если процесс по какой-то причине не завершился, то он и не начнётся тогда больше никогда?

☠️☠️☠️
ДП
На сайте с 23.11.2009
Offline
203
#4

В этом случае да, я в курсе про такую особенность :)

seosniks
На сайте с 13.08.2007
Offline
389
#5

А если установить set_time_limit(60); //60 сек

нарпимер на 10 минут или 30 минут.

set_time_limit(18000);// 30 мин

и крон запускать каждые 35 минут.

такой вариант возможен?

seosniks добавил 23.03.2011 в 15:02

Дикий пионер:
вопрос у вас, конечно, по другому сформулирован, но в линуксе есть вот такая команда: http://www.unix.com/man-page/linux/1/flock/ , еще в комментах тут:http://habrahabr.ru/blogs/linux/114622/
Ну и как самопальный вариант - в скрипте создавать в начале файлик, в конце стирать, а при запуске проверять его наличие.

Пробовал такой вариант

<?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 создается и пишется.

Все равно запускаются новые процессы.

пока вижу только такой вариант

set_time_limit(18000);// 10 мин 

далее попутно получать с помощью getmypid();

ID сохранять его в базу или файл, и по истечении времени

кроном

убивать процесс, не важно завершился он или нет, и дергать файл.

seosniks добавил 23.03.2011 в 15:05

'[umka:
;8706739']Попробуйте прописать полные пути к командам ps, grep и что там у вас ещё :)

не вышло, возможно проблема в срипте.

вот кусок старого кода.


<?
$filename = '/vb.kuzova.org/s.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);


$filename = 'vb.kuzova.org/m.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);?>

Раньше он работал, щас не хочет работать.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий