2017-10-16 44 views
0

當我打開控制檯並寫入php server.php時,websockets運行良好。但是當我關閉會話時,websockets停止工作。我怎樣才能讓它一直工作?這是我server.php文件 - 沒有什麼複雜的:關閉控制檯後CentOS 7上的WebSocket

use Ratchet\Server\IoServer; 
use Ratchet\Http\HttpServer; 
use Ratchet\WebSocket\WsServer; 

$server = IoServer::factory(
    new HttpServer(
     new WsServer(
      new WebSocket() // <-- My class, ignore it 
     ) 
    ), 
    SERVER_PORT, 
    SERVER_HOST 
); 

$server->run(); 

CentOS上運行的Apache 2.4.6在PHP 5.6 7.

+0

當您關閉控制檯還關閉應用。使用屏幕在屏幕外使用:ctrl + A和ctrl + D。 –

+0

https://uisapp2.iu.edu/confluence-prd/pages/viewpage.action?pageId=115540034 –

+0

這對我有什麼幫助?我不需要'屏幕外',但websockets工作,直到我以某種方式停止它(如服務),它需要每次運行。 – debute

回答

0

爲Linux安裝屏幕工具:

百勝-y安裝屏幕

創建新的屏幕:

screen -S SESSIONNAME 

返回到畫面:

screen -r SESSIONNAME 

退出從屏幕:

ctrl + a + d 

當您打開屏幕:瀏覽到您的應用程序的路徑,並啓動它。 當你想出門使用CTRL + A + D。當你想回去使用:screen -r SESSIONNAME。

屏幕不是你的問題100%的理由。如果您的應用程序停機一天,您必須檢查內存泄漏或應用程序中的其他錯誤。

此刻轉到屏幕-r SESSIONNAME以查看屏幕出現的情況。

+0

我明白了,但是我發現了一個更好的方法(對我來說),它提供了自定義服務,我可以在重新啓動時啓用它,並且比屏幕更方便。 – debute

0

我找到了一種方法 - 創建自己的服務來在後臺運行websockets。對我而言,維護起來更容易。下面是我的步驟(需要EPEL):

$ yum install iperf3 
$ adduser wsworker -s /sbin/nologin 
$ vi /etc/systemd/system/websockets.service 

然後插入內容(改變ExecStart你自己):

[Unit] 
Description=WebSockets Service 
After=network.target 

[Service] 
Type=simple 
User=wsworker 
ExecStart=/usr/bin/php /var/www/public/server.php 
Restart=on-abort 


[Install] 
WantedBy=multi-user.target 

刷新systemd並啓動新的服務:

$ systemctl daemon-reload 
$ systemctl start websockets 

啓動時啓動服務:

$ systemctl enable websockets 

停止服務器:

$ systemctl stop websockets 

Original article