PHP实现定时任务的几种方式

关于定时任务,之前以前认识了一种最常用的:crontab定时任务。通过linux的定时任务去实现。今天又认识了一下php实现定时方式的其它方式,总结一下。

一 服务器定时任务

服务器定时任务,其实就是unix系统下的crontab实现,具体的设置:Linux定时任务crontab;不过除了直接定时读取php脚本的方式,我们还可以用定时调用接口的方式。

运行脚本时:

/1 php /data/www/cron.php 每分钟执行cron.php

URL方式调用:

lynx方式:/1 lynx dump http://www.gzpblog.com/cron.php(dump选项来把URL的输出转换来标准输出)

curl方式:/1 /usr/bin/curl o temp.txt http://www.gzpblog.com/cron.php(Curl默认在标准输出显示输出。使用 “curl o” 选项,把脚本的输出转储到临时文件temp.txt)

wget方式:/1 /usr/bin/wget q O temp.txt http://www.gzpblog.com/cron.php(q 选项表示安静模式。”O temp.txt” 表示输出会发送到临时文件。)

以上方式,是将php脚本放在可以用url访问的地址地中,比如http://www.gzpblog.com/cron.php,定时调用触发任务。

二 ignore_user_abort()方式

ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

先使用一个cron.php文件来控制脚本的终止,cron.php内容为:

return 1;

?>

脚本php文件为:

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.

set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去

$interval=6030;// 每隔半小时运行

do{

$run = include 'config.php';

if(!$run) die('process abort'); //return 0 时, 终止

//TODO 该干啥干啥

sleep($interval);// 等待5分钟

}

while(true);

通过改变cron.php的return 0 , 来实现停止程序。但是这种方法,不好内存管理。

三 file_get_contents()方式

$time=15;

$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

//TODO

sleep($time);

file_get_contents($url);

?>

php脚本sleep 一段时间之后通过访问自身的方式继续执行,这样就能保证每个PHP脚本执行时间不会太长,不受time_out的限制。因为每一次一次循环php文件都是独立执行,所以这种方法,避免了time_out的限制。 但是最好和上边一样 加上控制代码cron.php,以便能够终止进程。

本文来自企鹅号 - PHP开源社区媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏py+selenium

linux下运行python3出现TypeError: a bytes-like object is required, not 'str'

 以上代码用python3运行后,出现TypeError: a bytes-like object is required, not 'str'

2892
来自专栏维C果糖

史上最简单的 MySQL 教程(七)「中文数据问题」

由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的对应关系,也就是字符集。

3665
来自专栏xiaoheike

Github使用教程

你的本地Repository由 git 维护的三棵“树”组成。第一个是你的工作目录(Working dir),就是本地磁盘,例如:E:\first;第二个是缓存...

1843
来自专栏程序员宝库

使用 Node.js 开发简单的脚手架工具

像我们熟悉的 vue-cli,react-native-cli 等脚手架,只需要输入简单的命令 vue init webpack project,即可快速帮我们...

1262
来自专栏Python小屋

Python批量提取PDF文件中的文本

首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库。 import os import sys import time p...

3195
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(三十四) ——Redis Lua脚本环境设计与实现

《Redis设计与实现》读书笔记(三十四) ——Redis Lua脚本环境设计与实现 (原创内容,转载请注明来源,谢谢) 一、创建lua环境 为了在redis...

3665
来自专栏PHP在线

拒绝重复造轮子,用composer搞自己的框架(2)

久负盛名的 CodeIgniter 框架是很多人的 PHP 开发入门框架,同样也是我开始学习如何从头构建一个网站的框架。在 CI中我学到了很多,其中对 MVC ...

3489
来自专栏Linux运维学习之路

day3、Linux快捷键及vim命令快捷键

Linux命令行快捷键 快捷键: tab键  自动补全路径 目录  名字,  自动不全命令 快捷键: ctrl +l(小写) 清屏 、 ctrl +c 取消当前...

1907
来自专栏林德熙的博客

git subtree pull 错误 Working tree has modifications

git subtree 是不错的东西,用于 git 管理子项目。 本文记录我遇到问题和翻译网上的答案。

721
来自专栏coder修行路

Python 并发编程(一)之线程

常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程) 这些线程将由操作系统...

1866

扫码关注云+社区