Как сохранить сервер websocket, даже после закрытия терминала SSH?

Итак, я использую Ratchet с PHP и в настоящее время загрузил успешный пример websocket на свой сервер.

Он работает после того, как я перехожу на SSH, а затем просто запускаю вручную «php bin / chat-server.php».

Мне было интересно, что в коммерческой ситуации, как я могу заставить чат-сервер работать?

Благодарю.

Related of "Как сохранить сервер websocket, даже после закрытия терминала SSH?"

Сделайте демона.

Если вы используете symfony2, вы можете использовать компонент Process .

// in your server start command $process = new Process('/usr/bin/php bin/chat-server.php'); $process->start(); sleep(1); if ($process->isRunning()) { echo "Server started.\n"; } else { echo $process->getErrorOutput(); } // in your server stop command $process = new Process('ps ax | grep bin/chat-server.php'); $process->run(); $output = $process->getOutput(); $lines = preg_split('/\n/', $output); // kill everything (there can be multiple processes if they are spawned) $stopped = False; foreach ($lines as $line) { $ar = preg_split('/\s+/', trim($line)); if (in_array('/usr/bin/php', $ar) and in_array('bin/chat-server.php', $ar)) { $pid = (int) $ar[0]; posix_kill($pid, SIGKILL); $stopped = True; } } if ($stopped) { echo "Server stopped.\n"; } else { echo "Server not found. Are you sure it's running?\n"; } 

Если вы используете родной PHP, никогда не бойтесь, popen – ваш друг!

 // in your server start command _ = popen('/usr/bin/php bin/chat-server.php', 'r'); echo "Server started.\n"; // in your server stop command $output = array(); exec('ps ax | grep bin/chat-server.php', &$output); $lines = preg_split('/\n/', $output); // kill everything (there can be multiple processes if they are spawned) $stopped = False; foreach ($lines as $line) { $ar = preg_split('/\s+/', trim($line)); if (in_array('/usr/bin/php', $ar) and in_array('bin/chat-server.php', $ar)) { $pid = (int) $ar[0]; posix_kill($pid, SIGKILL); $stopped = True; } } if ($stopped) { echo "Server stopped.\n"; } else { echo "Server not found. Are you sure it's running?\n"; } 

Конечно, есть и другие полезные библиотеки PHP для работы с демонами. Googling «php daemon» даст вам много указателей.

В этом уроке показан действительно классный способ превратить WebSocket в службу * nix, чтобы он сохранялся даже при закрытии вашего SSH-соединения.

В основном вы создаете файл /etc/init/socket.conf со следующим содержимым

 # Info description "Runs the Web Socket" author "Your Name Here" # Events start on startup stop on shutdown # Automatically respawn respawn respawn limit 20 5 # Run the script! # Note, in this example, if your PHP script (the socket) returns # the string "ERROR", the daemon will stop itself. script [ $(exec /usr/bin/php -f /path/to/socket.php) = 'ERROR' ] && ( stop; exit 1; ) end script 

Сообщение блога:
http://blog.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/

Запустите его в /etc/rc.d/rc для * nix-серверов. Это должно запускать ваш PHP-скрипт всякий раз, когда сервер загружается.

На самом деле я не знаю, как это работает в отрасли, поскольку сейчас я просто программист / линукс-хоббист и студент, но это маршрут, который я бы отправил на личный сервер.

Документация храпового механизма имеет страницу развертывания . Вы проверили его?

Старый ответ: может быть плохой идеей на prod-сервере (это личное предположение), но вы можете использовать команду screen чтобы открыть терминал, запустить демон, а затем нажать Ctrl-A, Ctrl-D и ваш терминал все еще жив , открыт в фоновом режиме. Чтобы снова подключиться к этому терминалу, подключитесь к серверу и введите screen -r .