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先生个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇: 一起来掌握PHP静态化技术
下一篇: K先生:今天我们来做个约定吧
文章评论
评论列表