Создаем фоновый php скрипт под Linux .демон на php (Рейтинг: +2)

Печать RSS
Создаем фоновый вечно работающий php скрипт в Linux (Демон на php).

Демоны - процессы, работающие в фоновом режиме.
Для нужд проекта нужно было написать программу которая будет
в фоновом режиме каждых 30с. проверять нужные параметры и рассылать уведомления пользователям.
Функция проверки запущен ли уже процесс в linux:
<?
/**
* Проверка на повторный запущенный процес в LINUX
* В случае если процесс запущен второй раз функция возвращает TRUE иначе FALSE
* пример: is_running_process('test.php');
* Author: GANJAR
* ICQ: 993770 Site: http://mytu.ru
*
*
* @example is_running_process($process_name);
*
* @param string $process
* @return bool
*/
function is_running_process($process){
    exec( 'ps axw | grep -v grep | grep '.escapeshellarg($process), $output);
    $enabled = false;
    foreach($output as $process_line) {
        if	(preg_match('!\d+\s+(\d|\?)+\s+[S|I|R|N]+\s+!i', $process_line))	{
            if($enabled){
                return TRUE;
            }
            $enabled = true;
        }
    }
    return FALSE;
}
?>
Пример использования:
1. создаем *.php, пишем туда такие строчки:
 #!/www/php/services/php -q
<?php
    set_time_limit(0);
//---------------------------//        Some Function
  /**
  * Проверка на повторный запущенный процес в LINUX
  * В случае если процесс запущен второй раз функция возвращает TRUE иначе FALSE
  * пример: is_running_process('test.php');
  * Author: GANJAR
  * ICQ: 993770 Site: mytu.ru
  *
  *
  * @example is_running_process($process_name);
  *
  * @param string $process
  * @return bool
  */
  function is_running_process($process){
      exec( 'ps axw | grep -v grep | grep '.escapeshellarg($process), $output);
      $enabled = false;
      foreach($output as $process_line) {
          if	(preg_match('!\d+\s+(\d|\?)+\s+[S|I|R|N]+\s+!i', $process_line))	{
              if($enabled){
                  return TRUE;
              }
              $enabled = true;
          }
      }
      return FALSE;
  }
//---------------------------//        Run
    if(!is_running_process(basename(__FILE__))){

        while(TRUE){
                
                //Нужные действия
                echo "Run program from mytu.ru \nsleep 30s - date ".date('Y-m-d H:i')."\n";
                sleep(30);
        }

    } else {
        echo "Error. ".basename(__FILE__)." running\n";
    }

?>
Строка
<?if(!is_running_process(basename(__FILE__)))?>
- не допустит клонирования процесса.
То есть проверит запущен ли уже процесс текущего файла
и в случае если процесс не найден выполнит нужный нам код. Иначе - получим соощение об ошибке.
2. добавляем в крон созданный скрипт с интервалом запуска в 10мин.
В итоге получим одиночный вечноработающий процесс скрипта.
Применения могут быть самые разнообразные: от проверки доступности сайта (uptime) до различных парсеров, кэширования сайта.
Добавил:
Рейтинг: +2
Просмотры: 4747
Комментарии (2) »