php后台运行以及定时任务的4种实现原理以及代码

后台任务在我们php编程中虽然用的不是很多甚至很多php程序员都没听过甚至觉得后台运行是不可能实现的,本人因为项目需求多次演变在这里分享给大家,本人第一次想实现后台运行是利用 方法二 在其执行完成后输出一段Js代码让页面再次执行,然后在服务器中打开该页面!以下实现方式除了方法一我不推荐使用外其他我在项目中都使用过!

方法一、php自带函数实现后台运行(不推荐使用,不太稳定而且弊端很多)
set_time_limit  允许运行的最长时间,0表示不限制
sleep 运行后延时多久在运行后面的代码

当我什么使用set_time_limit函数后将代码写在一个无限循环里面即可!

set_time_limit(0);

while (true) {

    //php代码

    sleep(10);  //运行一次延时10秒后在执行下一次

}

方法二、写成网页浏览的形式打开即执行然后用http监控
HTTP监控本来是用来监控网站状态的,一次项目的时候无意将其做为了后台运行的方法;
HTTP监控会定期通过http协议(Get/Post)访问你要监控的页面,而每一次访问都会运行我们要执行的代码,如果运行时间比较长可以加入方法一的set_time_limit;

推荐2个Http监控网站:
1-阿里云监控(免费监控11个网站,多了收费,免费带短信提醒,个人推荐) 
2-360云监控(http://jk.cloud.360.cn/Index/products) 不是很喜欢用360的产品

方法三、惰性运行
惰性也就是说每次网站运行都会运行那些被定义为后台任务的代码,Discuz开源系统就是用的这种方法,流量越大越任务越精准,我个人用此方法实现一般都是开发成一个全局插件来运行php任务脚本文件!

方法四、php Cli模式(推荐)
php Cli模式运行稳定超过70%的php程序员不知道此方法.本人一套php采集系统利于cli模式稳定运行半年,采集文章300+万;
当我们运行利于cli模式运行一个php文件之后会自动执行里面的代码,我们只需要将代码写成一个无限循环即可,不过最好在执行一次循环后加入sleep延时!

注意事项:
1、在无限循环中如果要载入文件必须用require_once或者include_once否则会出现重复函数或者类已经存在之类的错误!
2、如果在无限循环中想要后台操作退出循环可以创建一个文件,每次循环都先判断该文件是否存在,存在则运行代码,不存在则跳过代码,这样我们可以后台控制后台运行的启动与关闭!

原文地址:http://www.dmzshequ.com/thread-7434-1-1.html

原文地址:https://www.cnblogs.com/zhukung/p/10216770.html

时间: 2024-10-29 02:50:04

php后台运行以及定时任务的4种实现原理以及代码的相关文章

android: 后台执行的定时任务

Android 中的定时任务一般有两种实现方式,一种是使用 Java API 里提供的 Timer 类, 一种是使用 Android 的 Alarm 机制.这两种方式在多数情况下都能实现类似的效果,但 Timer 有一个明显的短板,它并不太适用于那些需要长期在后台运行的定时任务.我们都知道,为 了能让电池更加耐用,每种手机都会有自己的休眠策略,Android 手机就会在长时间不操作 的情况下自动让 CPU 进入到睡眠状态,这就有可能导致 Timer 中的定时任务无法正常运行. 而 Alarm 机

Linux下实现秒级定时任务的两种方案(crontab 每秒运行)

第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date * * * * * sleep 20; /bin/date * * * * * sleep 40; /bin

linux 让程序在后台运行的几种可靠方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. 先介绍一下hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯.当用户 logout 时,modem 就会挂断(hang up)电话. 同理,当 modem 断开连接时,就

tomcat后台运行的两种方法

我们使用tomcat 启动一个新的项目,会出现一个窗口.如果有人需要使用这台电脑的时候,就很容易关掉tomcat 导致程序停止运行.为避免这种错误把tomcat设置为后台运行. 下面两种方法实现tomcat 后台运行: 一.修改tomcat里面的配置 1.找到tomcat下bin/setclasspath.bat文件,右键EditPlus打开. 2.在文件中找到 set_RUNJAVA="%JRE_HOME\bin\java", 并修改为set_RUNJAVA="%JRE_H

Linux --- 程序后台运行的几种方法

有时候我们运行一个程序,耗时比较长,所以在快下班的时候或是网络不稳定的时候就比较抓狂. 今天分享几个我在工作中用到的把程序放在后台运行的方法. nohup $ nohup --h Usage: nohup COMMAND [ARG]... or: nohup OPTION Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and

PHP实现执行定时任务的几种思路详解

PHP实现执行定时任务的几种思路详解 php 定时任务 唐霜 2015年07月03日发布 推荐 7 推荐 收藏 65 收藏,11.1k 浏览 PHP本身是没有定时功能的,PHP也不能多线程.PHP的定时任务功能必须通过和其他工具结合才能实现,例如WordPress内置了wp-cron的功能,很厉害.本文,我们就来深入的解析几种常见的php定时任务的思路. Linux服务器上使用CronTab定时执行php 我们先从相对比较复杂的服务器执行php谈起.服务器上安装了php,就可以执行php文件,无

[转]Java实现定时任务的三种方法

在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: public class Task1 { public st

Linux下实现秒级定时任务的两种方案

Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date* * * * * sleep 20;

nobup 与 后台运行命令

1. Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态) 2. Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal 3. Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟 4. Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根