本文实例讲述了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程序设计有所帮助。
相关文章
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
Debian 8或Debian 9(64 位)安装 .NET Core
2025-05-29 110 -
详细探讨台湾数据中心的环境特点、基础设施建设、及其对业务运营的影响
2025-05-25 41 -
2025-05-29 80
-
2025-05-25 29
-
2025-05-27 48

