PHP-手工执行任务&定时任务的处理方式

1:phpweb方式

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 可以让程序无限制的执行下去
ini_set('memory_limit','512M'); // 设置内存限制
$interval=60*30;// 每隔半小时运行
do{
  //ToDo 各种需要处理的定时任务
  sleep(1);// 等待1秒
}
while(true);
使用php的特性,直接在某个php文件写入以上代码,进行访问。
优点:容易写,开发速度快,直接在后台运行
缺点:难维护,稳定性差,不好查看,有处理延时

2:php-cli
可以用php-cli(命令文本)的方式执行(绿色php文件位置请对应调整)
/usr/local/php5-7.1.13-20180201-134129/bin/php  /Library/Webserver/Documents/daigou/pcntl2.php

<?php
echo 'test';exit;
输出:test
没错,只需要php文件,不关闭运行窗口就可以一直执行下去。
优点:开发速度快,可后台运行,易维护,易查看
缺点:容易出现内存泄漏,有一定的技术要求,稳定性一般,有处理延时

3. swoole扩展
swoole扩展已经实现了定时任务,只需要调用就行。
<?php
swoole_timer_tick(3000, function () {
    echo "after 3000ms.\n"; 
    swoole_timer_after(14000, function () {   
        echo "after 14000ms.\n";
    });
});
优点:稳定性高,有定时器校正,定时粒度高,使用容易,开发速度快
缺点:需要linux,需要安装swoole

4. linux大法:crontab
使用linux自带的crontab定时任务,访问运行在web模式下的php crontab -e  查看所有定时任务
crontab的语法是  时间   程序   文件( >是覆盖  >>是追加),如:
(1)*/5 * * * * /web/php_admin/yii rate/index >> /app/web/runtime/admin_logs/dim_cron
(2) 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart(表示每月1、10、22日的4 : 45重启lighttpd)
(3)tail -f /app/web/runtime/admin_logs/dim_cron  再观察下就知道他有没有执行了
优点:稳定性一般,没有延时
缺点:开发需要linux,定时粒度1分钟较长

猜你喜欢

转载自blog.csdn.net/niki_zhu520/article/details/82974180