日期:2014-05-16  浏览次数:20738 次

使用PHP做Linux/Unix守护进程

本文参考http://www.w3pop.com/learn/view/p/4/o/0/doc/php_daemon/

何为守护进程?

Linux/Unix下守护进程(Daemon)大家都知道,比如我们常用的httpd、mysqld等等,就是常驻内存运行的程序,类似于 Windows下的服务。一般守护进程都是使用C/C++来写,就是通过fork生成子进程,当前台shell下的父进程被杀掉,子进程就转到后台运行, 为了不在终端产生输出信息,就通过syslog等函数来写日志文件。


Unix中的 nohup 命令的功能就是不挂断地运行命令,同时 nohup 把程序的所有输出到放到当前目录的 nohup.out 文件中,如果文件不可写,则放到 <用户主目录>/nohup.out 文件中。那么有了这个命令以后,我们的php程序就写程shell脚本,使用循环来让我们的脚本一直运行,那么不管我们终端窗口是否关闭,都能够让我们的php脚本一直运行。当然,当我们的php进程被杀或者我们的操作系统重启了,自然就会中止了。


确定你的php脚本引擎的位置,我安装在/www/wdlinux/php/bin/php

可以将此文件cp到/bin中

在文件头部加上

#!/www/wdlinux/php/bin/php就会认为此文件为php文件


在socket例子中,注意自己的php是否--enable-sockets,一般php默认是不安装的

找到php的源文件,我的是php-5.2.17

cd /ext

会有个sockets文件夹

cd sockets

/www/wdlinux/php/bin/phpize

./configure --with-php-config=/www/wdlinux/php/bin/php-config

make&makeinstall

然后修改php.ini

加上

[sockets]
extension_dir="/www/wdlinux/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/"
extension="sockets.so"

文件位置视自己电脑而定

有些文件档说把;extension=php_sockets.dll的;号去掉,好像安装了扩展就不需要了,去掉了反而会说没有那个文件


配置好后实例就可以跑了,但telnet会说连不上,防火墙添加tcp信息端口10000

连上后发现不是想要的东西,修改了一下端口,我改为11111,重新nohup /home/php_daemon2.php &

成功了

注意socket_listen最大连接数为5