php脚本守护进程原理与实现方法详解

2025-05-27 0 24

本文实例讲述了php脚本守护进程原理与实现方法。分享给大家供大家参考,具体如下:

思路:

1. while 循环,若当前没有数据要操作可以休眠;
2. crontab 脚本每隔固定时间段执行该脚本,执行时先检测是否已在执行,若无 执行,有则 跳过。
3. nohup 后台执行
4. flock -xn 加锁

实例:

要执行代码:index.php

?

1

2

3

4

5

6

7

8
<?php

set_time_limit(0);

//死循环

while(1) {

$message = '1111111' . "\\n";

error_log($message);

sleep(5);

}

?

1

2

3
#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建

* * * * * flock -xn /tmp/lock/test1.lock -c 'nohup php index.php >> /php/test.log 2>&1 &'

* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'

在写好的php脚本。为防止守护进程内存溢出,建议定期检测内存占用。
将以下代码放到业务脚本中:

?

1

2

3
if(memory_get_usage()>100*1024*1024){

exit('内存溢出');//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端

}

注意:

nohup 任务查看与关闭方法:

关闭:

?

1

2

3

4

5
//方法一:

ps -e | grep commend

kill -9 pid

//方法二:

fg %n //n为jobs命令查看的进程号

查看:

?

1

2
//查看后台进程

jobs

原理:

使用linux flock 文件锁实现任务锁定,解决冲突

格式:

?

1

2
flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command

选项

-s, –shared: 获得一个共享锁
-x, –exclusive: 获得一个独占锁
-u, –unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, –nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, –timeout: 如果没有立即获得锁,等待指定时间
-o, –close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, –command: 在shell中运行一个单独的命令
-h, –help 显示帮助
-V, –version: 显示版本

运行一个php文件,文件锁使用独占锁,如果锁定则失败不等待。参数为-xn

* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'

这样当任务未执行完成,下一任务判断到/tmp/mytest.lock被锁定,则结束当前的任务,下一周期再判断。

希望本文所述对大家PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php脚本守护进程原理与实现方法详解 https://www.kuaiidc.com/72217.html

相关文章

发表评论
暂无评论