Проверьте, выполняется ли процесс с использованием PHP в Linux

Я использую 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('&nbsp;&nbsp;&nbsp;', 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 – это процесс, который я проверял