linux — проверить, работает ли программа

Я собрал и настроил мини-сервер дома под управлением Debian GNU / Linux с Apache. Я также установил видеоигру с открытым исходным кодом Teeworlds для того, чтобы запустить выделенный сервер.

Моя идея состоит в том, чтобы отображать некоторую информацию о состоянии сервера на моем сайте, используя Apache и PHP. Наиболее важной функцией является отображение, если сервер работает или нет.

Я пытался использовать pgrep сначала команда, которая отлично работает со многими процессами, но не в моем случае:

<?php exec("pgrep process_name", $output, $return);
if ($return == 0) {
/*Service is running*/
}
else{
/*Service is not running*/
}
?>

Далее я узнал, что это работает в терминале:

ps -ef | awk '$8=="/usr/games/teeworlds-server" {print $2}'

но я не могу использовать его с командой PHP exec, потому что в этой строке используются двойные кавычки (эти одинарные кавычки не работают).

Есть ли другой способ проверить состояние процесса с помощью PHP? Или я что-то не так делаю?

Замечания: Игра была установлена ​​из официальных репозиториев Debian.

0

Решение

Я решил эту проблему, изменив Exec команда:

exec("ps -ef | awk '$8==\"/usr/games/teeworlds-server\" {print $2}'", $output, $return)

с shell_exec:

 $test= shell_exec("ps -ef | awk '$8==\"/usr/games/teeworlds-server\" {print $2}'");
if ($test>0) {
/*Server is running*/
}
else{
/*Server is not running*/
}
0

Другие решения

У меня была такая же проблема, но в основном для перезапуска аварийных серверов. Серверы Teeworlds могут отвечать за некоторые входящие пакеты, например, он сообщает информацию о сервере для браузеров серверов. Итак, если сервер отправляет ответ на наш запрос, он жив. Я использовал эту функцию PHP:

function is_alive($port) {
$socket = stream_socket_client('udp://localhost:'.$port , $errno, $errstr, 3);
fwrite($socket, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x69\x65\x33\x05");
$response = fread($socket, 2048);
return (!$errno && $response);
}

И простой пример использования:

$servers = array(); //you may have many servers with different ports
$servers[1] = 8302;
$servers[2] = 1234;
$servers[3] = 8308;
$servers[4] = 8000;

// checking every server
foreach ($servers as $servernumber => $port) {
echo "checking server ".$servernumber." ...";
if (!is_alive($port)) {
echo " not running/responding ...";
}
echo "\n";
}

Постскриптум Работает на серверах Teeworlds версии 0.6.X

0

По вопросам рекламы [email protected]