定时器php windows任务计划

背景因为需要每天从接口处获取一次数据,所以难免会用到这让人又爱又恨的定时器/计划任务。

网上搜索了一番,大致有以下两类:

1:配合使用ignore_user_abort()和set_time_limit(),使脚本脱离浏览器运行。

 

1 ignore_user_abort(); // 后台运行  
2 set_time_limit(0); // 取消脚本运行时间的超时上限
3 $interval=30;// 每隔30S运行,这个间隔时间是可以随着 需要进行修改 
4 do{
5     //抓取数据
6     sleep($interval);
7 }while(true);           

 

非常的小巧精悍,即便浏览器关掉也能运行,可这是一个死循环,重启apache才能终止掉它。

改进:

 

1 ignore_user_abort(); // 后台运行  
2 set_time_limit(0); // 取消脚本运行时间的超时上限
3 $interval=30;// 每隔30S运行,这个间隔时间是可以随着 需要进行修改 
4 do{
5     $flag = include 'flag.php';
6     //抓取数据
7     sleep($interval);
8 }while($flag);   
  
//flag.php
<?php return 1;?>

 

在do的时候引入flag.php文件,将其值赋予$flag,并作为判断循环的条件。

在服务器上测试过每隔一分钟执行一次,没什么问题,开心的把秒数改为一天,任务完成。

因为服务器在内网,离开环境后我不知道程序执没执行,几天后再次查看,发现只跑了一次...原因未明..

看来这办法不是很稳,看来只能祭出我的杀手锏了!

2:windows任务计划程序

打开任务计划程序->任务计划程序库->创建任务

 取个名字,该勾选的勾选,来到触发器页面,新建

 比如设置明天开始,每天9:00执行一次

确定,来到操作页面,新建

程序或脚本,选择要执行的bat文件,启始于(可选)填上bat文件所在的目录

这样,基本的设置就完成了!

然而...并没有...重点是bat文件

如果要定时执行某个php文件,bat文件里可以这么写

D:\php\php.exe -q D:\www\test.php

意思就是让php.exe去执行test.php这个文件。

然而...如此这般,我并不能调用框架里的CURD操作来整理我从接口获取的数据,

当然,用PDO链接数据库,再insert也可以,虽然比较麻烦。

不过,其实有更简单的方法。

也是用windows的任务计划程序,

不过不是执行php文件,而是让ie浏览器打开一个URL再关闭ie浏览器

在bat文件里这么写

@echo off
echo 正在关闭未关闭的IE进程,请稍等......
taskkill /f /im iexplore.exe
echo -------------开始运行指定的网页页面----------
::echo.&pause
start "" "C:\Program Files\Internet Explorer\iexplore.exe" http://localhost/0915/Home/balabala/open

echo IE打开完成!
::echo.&pause
ping 127.0.0.1 -n 2
taskkill /f /im iexplore.exe

完美,简单粗暴。

PS.linux下的定时器还没学,到时候再添加。

参考文章:

http://blog.csdn.net/woshixuye/article/details/18050769

http://www.cnblogs.com/lcword/p/5634284.html

http://blog.csdn.net/happy_jijiawei/article/details/50813977

http://blog.csdn.net/skygreen_2001/article/details/7974245

 

posted on 2017-09-15 11:08  谁抢了我的满天星  阅读(223)  评论(0编辑  收藏  举报

导航