运行PHP-CLI服务器

今天是个好日子,

我最近对WebSocket技术感兴趣。 我使用PHP构建了自己的服务器,我使用PHP CLI在Windows上运行。 这对于开发来说很好,但现在我需要考虑部署。

我得到了一个运行Ubuntu Server 10.10的小VPS。 我有Linux的基本知识,所以我设置了我的SSH客户端,安装了PHP-CLI并且搞砸了以确保它能够正常工作。

现在,我可以简单地运行我的服务器

php server.php 

但我不认为这是一个很好的方式。 一些问题:

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

关于控制台输出; 有没有办法将STDOUT或其他东西重定向到一个文件,所以我仍然可以在Windows上看到控制台输出,但在我的VPS上却记录了它? 至于服务器崩溃,在服务器启动时自动重启某些进程有哪些好方法? 而且我认为我可以将其作为守护进程或服务或类似的东西运行,因此它不会挂起主线程?

那么,对于那些问题,一些常用的解决方案是什么? 有什么地方我可以阅读更多内容吗? 我想在这个过程中学到一点点!

谢谢。

要将输出和任何错误重定向到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/README

如果你制作PHP文件,server.php,可执行文件,你可以在文件的顶部添加一行(也就是文件magic / shebang / hashbang)来调用它: server.php而不是php server.php 。 如果由于某种原因你甚至可以删除php扩展名。 像这样:

 #!/usr/bin/php  

Upstart可能是确保服务保持运行的方法。 此方法不涉及/ etc / rc *。 Upstart有五个软件包,默认都安装了:

  • Upstart init守护程序和initctl实用程序
  • upstart-logd为logd服务提供logd守护程序和作业定义文件
  • upstart-compat-sysv为rc任务提供作业定义文件,并提供与SysVinit兼容的reboot,runlevel,shutdown和telinit工具
  • startup-tasks为系统启动任务提供作业定义文件
  • system-services为tty服务提供作业定义文件

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

其他好post: “服务”和“/etc/init.d/”有什么区别?