目前碰到一个问题需要在大半夜的时候来执行一次数据库统计操作。我总不可能大半夜离开温暖的被窝来做这个吧,网上查了很多都说是用任务计划来做。
1:先说流程
原理就是在Windows服务器上新增一个定时任务,设置什么时候执行,执行什么文件(这里是一个批处理文件)。批处理文件里面的内容是使用php.exe来执行一个写好的PHP文件。PHP文件可以用curl来执行一个远程文件也行,也可以直接就是要跑的文件。
2:走起
先在服务器上新建一个定时计划 控制面板->任务计划->创建任务
名称什么的自己去填
然后创建一个触发器,这个地方是规定什么时候来运行
在创建一个操作,这个是用于指定需要定是计划需要执行的操作
到这里差不多计划任务已经差不多创建好了下面就开始来写我们的批处理脚本了,就是上图红圈的那个地方。
这是我写的,通过我的php.exe 来执行一个本地的php文件,有些到这里就可以结束了。具体要执行的里面的逻辑我就不写了,没意思啊。
windows 上面的到这里差不多就跑通了,以后有时间来补上Linux的。
20190415 补上Linux版本的处理定时任务的方法
一般情况下我们有两种方式来执行php方法,一种是直接有php-cli模式,另外一种是通常我们写接口一样的通过php-fpm来访问。
上面的windows版本使用的是php-cli模式,我们现在来使用远程调用接口的方式访问接口。
1:linux需要的两个命令 crontab、curl
corntab作为一个触发器实现定时触发某个任务的功能;curl是一个远程访问url的命令。
corntab使用方法:https://blog.csdn.net/bsf5521/article/details/76522222
curl使用方法:https://www.cnblogs.com/duhuo/p/5695256.html
2:创建一个shell供crontab调用
vim test.sh
a进入编辑模式输入
#!/bin/bash
curl "http://domain/leesing/public/index.php?s=test/execSpider" >/dev/null 2>&1
然后esc键输入:wq保存
给这个文件添加执行权限
chmod +x test.sh
3:将需要执行的脚本添加到crontab
①:将crontab先备份
crontab -l > crontab.bak
②:修改crontab
crontab -e
③:将我们的shell脚本添加到crontab
*/1 * * * * /data/myshell/test.sh > /dev/null 2>&1 &
这个编辑模式和之前使用vim是一样的,这里是每分钟执行一次,可以根据需求不同进行修改。
④:命令行显示crontab: installing new crontab
⑤:查看执行结果,这个时候去看nginx的日志,php的日志都行。如果nginx都没有打印日志那有可能是crontab出问题了没有触发。这个时候看下crontab的日志,tail -n10 /var/log/cron|grep test.sh进行问题排查。
如果有什么问题欢迎大家一起交流 qq:746160516