Создаем фоновый вечно работающий 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) до различных парсеров, кэширования сайта.