使用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