Linux中的Crontab实现PHP计划任务

PHP程序有时候需要定时执行,使用Linux的Crontab执行PHP脚本,完成PHP计划任务。譬如,微博上用得很多的一款APP应用——皮皮时光机,就是实现定时发送内容的功能。当然PHP中也有ignore_user_abort函数。
但这两种方法都不太可靠,不稳定。我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务。

下面介绍Crontab的两种方法。

一、在Crontab中使用PHP执行脚本
就像在Crontab中调用普通的shell脚本一样,使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本
如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。

00 * * * * lynx -dump http://www.centos.bz/myscript.php下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。

*/5 * * * * /usr/bin/curl -o temp.txt http://www.centos.bz/myscript.php当然,完成PHP计划任务的方法比较多Win下面也有计划任务,方法有很多的,但是比较稳定,也比较不错的方法基本是都是使用Linux下的这种Crontab。

 

直接在php中做

如果由页面执行,设置
<?php
ignore_user_abort(true);
set_time_limit(0);
?>

运用sleep(300)+死循环,
这样就可以实现计划任务了,这个程序里不要有输出,有输出容易中断

 代码如下 复制代码

<?php
ignore_user_abort(true);
set_time_limit(0);

while(1){
    $fp = fopen('time_task.txt',"a+");
    $str = date("Y-m-d h:i:s")."n";
    fwrite($fp,$str);//记录到time_task.txt文本
    fclose($fp);
    sleep(1800);    //半小时执行一次
}
?>

函数int ignore_user_abort :

从函数名本身,可以解释为,"忽略用户的影响"
因为所谓的用户是指客户端,即浏览器
所以进一步解释为,"忽略浏览器的影响"

那么影响指的是什么,影响指的是浏览器的关闭和异常

也就是说有这个函数在的php程序,即使在浏览器关掉的时候,程序没有执行完它还会继续执行,直到执行完

比如说,你有一段代码需要执行100秒,可是这个时间太长了,一般用户等不及,在等了60秒的时候受不了就关了
如果这个时候程序也随之终止,很可能造成数据异常,不一致或是错误,你需要程序继续运行

时间: 2024-09-29 17:12:48

Linux中的Crontab实现PHP计划任务的相关文章

linux中向crontab中添加定时任务

如何在linux中向crontab中添加定时任务呢?下面就来讲解一下: 首先在命令行终端输入 # vi /etc/crontab 回车进入编辑模式 在crontab最下面增加如下: 01 3 * * * root ./home/mysql_bak.sh   每天早上的3点01分执行此任务 以上参数对应如下: 分  小时  日  月  星期  执行命令 (取值范围,0表示周日,*表任意一天,一般一行对应一个任务) # 每天早上的3点01分执行此任务 重启crontab使任务生效: # /etc/i

linux中向crontab中添加定时任务的方法

如何在linux中向crontab中添加定时任务呢?下面就来讲解一下: 首先在命令行终端输入 # vi /etc/crontab 回车进入编辑模式 在crontab最下面增加如下: 01 3 * * * root ./home/mysql_bak.sh   每天早上的3点01分执行此任务 以上参数对应如下: 分  小时  日  月  星期  执行命令 (取值范围,0表示周日,*表任意一天,一般一行对应一个任务) # 每天早上的3点01分执行此任务 重启crontab使任务生效: # /etc/i

Linux中使用crontab命令启用自定义定时任务实例_Linux

Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,有需要的朋友可以了解一下. 一 简介 Linux下的任务调度分为两类,系统任务调度和用户任务调度 系统任务调度:系统需要定期执行的任务,比如重启.日志清理等,其配置文件是:/etc/crontab 用户任务调度:某个用户需要定期执行的任务.用户可以使用 crontab 命令来配置自己的定时任务.所有用户配置的定时任务都存放在 /var/spool/c

Linux中使用Crontab定时监测维护Tomcat应用程序的方法_Linux

监测的应用接口: 新闻接口.天气接口 处理方法:应用接口不可用时自动重启Tomcat,并发送告警邮件给相关人员 #!/bin/bash #--------------------------------------------------------- # 功能说明: # 监控指定HTTP服务是否可用,如果不可用立即重启Tomcat # # 使用说明: # 1. 将此脚本放置在/home/opentsp/crontab/目录下. # 2. 修改脚本执行权下为可执行权限. # 3. 添加到定时任务

Linux中定时计划任务crontab使用实例

1.计划任务概说: 计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思.在Linux中,我们经常用到 crond 服务器来完成这项工作.cron服务器可以根据配置文件约定的时间来执行特定的作务.比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务: 下面我们先来说说cron: 2.cron: 在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动.cron启动后,它会读取它的所有配置文件(全局性 配置文件/et

linux下使用crontab实现定时PHP计划任务失败的原因分析_php技巧

很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分析. 一般我们linux定时执行php代码例如: */5 * * * * /usr/local/php/bin/php /home/wwwroot/1.php 其实这样是可以执行php代码的. 但是为什么很多朋友在1.php写的生成一个缓存文件没有生成呢? 这个要涉及到crontab执行php的相对路径问题. 注意在执行文件中,有包含文件

详解Unix/Linux中周期执行指令Crontab命令_unix linux

简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行.这类作业一般称为cron jobs. cron 是 Unix/Linux 中提供定期执行 shell 命令的服务,包括 crond 和 crontab 两部分:      crond: cron

Linux中crontab命令参数与使用说明

定时任务常用的一个功能,详细如下: 服务的启动和停止 cron服务是linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: Linux代码 /sbin/service crond start  /sbin/service crond stop  /sbin/service crond restart  /sbin/service crond reload 以上1-4行分别为启动.停止.重启服务和重新加载配置. 要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc

linux中crontab命令启动/重启/停止详解

linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令. 一.crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,cron