运行 PHP-CLI 服务器

运行 PHP-CLI 服务器

我最近对 ​​WebSocket 技术产生了兴趣。我用 PHP 自己搭建了一个服务器,并在 Windows 上使用 PHP CLI 运行它。这对于开发来说还不错,但现在我需要考虑部署。

我买了一台运行 Ubuntu Server 10.10 的小型 VPS。我对 Linux 有基本的了解,所以我设置了 SSH 客户端,安装了 PHP-CLI,并摆弄了一下以确保它能正常工作,结果确实如此。

现在我可以使用以下命令运行我的服务器

php server.php

但我不认为这是个好办法。有几个问题:

  • 一旦我关闭 SSH 客户端,控制台输出会发生什么情况?
  • 如果服务器崩溃了怎么办?
  • 当服务器在主线程中以这种方式运行时,我无法在 VPS 上执行任何其他操作

关于控制台输出;有没有办法将 STDOUT 或其他内容重定向到文件,这样我仍然可以在 Windows 上看到控制台输出,但在我的 VPS 上它会被记录下来?至于服务器崩溃,有什么好方法可以在服务器启动时自动重新启动某些进程?我想我可以将其作为守护进程或服务或类似的东西运行,这样它就不会挂起主线程?

那么,通常使用哪些方法来解决这些问题呢?有没有什么地方可以让我阅读更多这方面的信息?我想在这个过程中学到一点东西!

答案1

要将输出和任何错误重定向到some_other_file:

php server.php 2>&1 some_other_file

>&将流重定向到另一个文件描述符(在 BASH shell 中):

  • 0 是标准输入
  • 1 是标准输出
  • 2 是 stderr

或者,2>&1将 2 重定向到 1。然后实时观察输出:

tail -f some_other_file

从启动时开始:你可以从/etc/rc.local或者,更高级的解决方案可能是在/etc/init.d/目录。请参阅/etc/init.d/自述文件如何做到这一点。

如果您将 PHP 文件 server.php 设为可执行文件,则可以在文件顶部(又名文件 magic/shebang/hashbang)添加一行,以如下方式调用它:server.php而不是php server.php。如果出于某种原因您想这样做,您甚至可以删除 php 扩展名。像这样:

#!/usr/bin/php
<?php
    // PHP code here

暴发户可能是确保服务保持运行的方法。此方法不涉及 /etc/rc*。Upstart 有五个包,全部默认安装:

  • Upstart init 守护进程和 initctl 实用程序
  • upstart-logd 为 logd 服务提供 logd 守护进程和作业定义文件
  • upstart-compat-sysv 为 rc 任务以及提供与 SysVinit 兼容性的重启、运行级别、关闭和 telinit 工具提供作业定义文件
  • startup-tasks 提供系统启动任务的作业定义文件
  • system-services 为 tty 服务提供作业定义文件

学习过程非常有趣,非常值得。Upstart 有一个网站:http://upstart.ubuntu.com/

其他精彩帖子:“Service” 和 “/etc/init.d/” 有什么区别?

相关内容