K先生个人博客

当前位置:首页 > 爱技术 > 正文

PHP与Linux定时任务

定时任务在实际开发中用到是非常多的,这里也简单说说PHP怎么执行定时任务。我们都知道PHP是一门解释性语言,当我们在浏览器中输入某个URL时,我们才能去执行PHP,但是如果不访问URL呢,怎么让PHP跑起来?这个问题,可能大家都没有仔细思考过,当然我也没有考虑过,,,, 

PHP的定时任务其实就是让PHP脚本每隔一段时间运行一次,这就需要结合Linux的crontab了。下面我们需要先了解一下crontab。

Linux crontab命令

Linux crontab是用来定期执行程序的命令。先看一下下面几个命令。

crontab -e  //编辑定时任务

crontab -r //删除定时任务

crontab -l  //列出当前定时任务

除此之外你还需要知道的是,定时任务的格式是怎么样的

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推

当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推

通过一个实例来了解定时任务 

首先我们在Linux下任一目录新建index.php文件

<?php
$path = dirname(__FILE__) . '/data.txt';
if (!file_exists($path)) {
	file_put_contents($path, 0);
} else {
	$num = file_get_contents($path);
	file_put_contents($path, $num + 1);
}

这段代码的意思在data.txt中写一个数字,并且每次执行将数字更新+1。 

然后我们使用crontab -e命令来创建定时任务,内容为下

*/1 * * * * php /www/wwwroot/crontab/index.php

这样其实定时任务就建好了,这句代码的意思是没过一分钟执行一次这个目录下的index.php文件一次。 

代码写好了,我们需要看定时任务是不是成功执行了。

tail -f /var/log/cron

使用该命令才看定时任务日志,下面就说明定时任务已经成功执行了。

接下来我们可以看一下,index.php同目录下是不是多了一个'data.txt'的文件,如果有说明我们已经成功了,并且文件中的值会每过一分钟+1。 

如果,如果并没有出现预期的结果,那么,,,开始排查bug吧,这是每个程序员都会经历的,同样的代码,同样的操作,为啥会出现不一样的结果??!!(抓狂) 

冷静一下,开始找bug了,首先你的确保自己的定时任务执行了,自己通过crontab日志确定,然后再想是不是代码的问题,php index.php先手动执行试试,咦,手动执行竟然也没出现预料的结果,开始仔细检查代码,而又想到自己在本地windows下能够完美运行该文件,那么如果有问题,可能出现在Windows和Linux系统的差异上,路径?权限? 

想到就试试,将代码里的路径换成绝对路径,并使用“/”连接(windows路径连接符是“\”),最后赋予index.php写和执行的权限chmod 777 index.php 

OMG!预期效果达到了。 

老规矩,如果你有疑问,欢迎留言。你若问,我必答。

作者K先生本文地址http://www.gold404.cn/info/34

版权声明:本文为原创文章,版权归 K先生个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!

文章评论

* 必填
可选
可选

评论列表