Я использую kannel для отправки SMS через PHP. Я хочу знать, как проверить, работает ли какой-либо конкретный процесс. Для запуска bearerbox
процесс с именем bearerbox
должен работать все время. Я хочу проверить, работает ли этот процесс или нет. Поскольку, если процесс не запущен, мне будет отправлено письмо с уведомлением об этом.
Самый простой способ – использовать pgrep
, который имеет код выхода 0, если процесс существует, 1 в противном случае.
Вот пример.
exec("pgrep bearerbox", $output, $return); if ($return == 0) { echo "Ok, process is running\n"; }
Вы можете использовать команду exec, чтобы найти свой процесс, а затем действовать соответствующим образом.
Что-то вроде:
exec('ps aux | grep bearerbox', $output);
Вам нужно будет решить, что возвращается на ваш сервер, чтобы решить, работает ли он или нет.
Удачи.
Есть много способов справиться с этим. Самый простой (и прямой ответ на ваш вопрос) – это захват вывода «ps».
Однако деамоны всегда создают файл «pid». Этот файл содержит идентификатор процесса демона. Если у вас это есть, вы можете проверить содержимое файла и посмотреть, работает ли процесс с этим идентификатором. Это более надежно.
supervisord также может иметь эту функциональность. Наконец, возможно, лучше получить реальную систему мониторинга, а не создавать что-то самостоятельно. Nagios может быть хорошим выбором, но могут быть и другие.
Простое, но удобное решение для мониторинга процессов через PHP: PHP-Linux-Process-Monitor .
Цели кода, такие как:
$ps = explode("\n", trim(shell_exec('ps axo pid,ppid,%cpu,pmem,user,group,args --sort %cpu'))); foreach($ps AS $process){ $processes[]=preg_split('@\s+@', trim($process), 7 ); } $head= array_shift($processes); $processes = array_reverse($processes); $output=''; foreach ($head AS $f) $output.="<td class=\"head\">$f</td>"; $output=sprintf('<tr class="head">%s</tr>',$output); foreach($processes AS $p){ $output.='<tr>'; foreach ($p AS $i=>$f){ if($i==0) $output.=sprintf('<td>%1$s</td>',$f); elseif($i==2) $output.=sprintf('<td class="cpu">%1$s<ins style="width:%1$s%%"></ins></td>',$f); elseif($i==3) $output.=sprintf('<td class="mem">%1$s<ins style="width="%1$s%%"></ins></td>',$f); elseif($i == 6) $output.=sprintf('<td class="command">%1$s</td>',$f); else $output.=sprintf('<td>%1$s</td>',$f); } $output.='</tr>'; } $cpu=implode(' ', sys_getloadavg()); $output=sprintf('<table data-cpu="%s" id="process">%s</table>',$cpu, $output);
Это лучший способ
<?php exec("ps -eo comm,pid | awk '$1 == "."\"gs\""." { print $2 }'", $output); if ($output != 0) { echo "The process gs is running\n"; } ?>
в приведенном выше коде gs – это процесс, который я проверял