• 欢迎访问情深深几许的博客网站,这里有免费网络资源信息,WordPress教程,Python、MySQL教程
  • 推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入金克斯的弹药库
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本网站吧

简单理解和实现Linux定时任务(crontab)

Linux zk 3年前 (2017-08-21) 16次浏览 0个评论

在项目的开发过程中经常会有定时任务的需求,例如按时自动处理订单状态或者需要做某个接口的队列。可是PHP本身对上述场景的支持并是不很好,虽然可以通过配置响应时间的方法让PHP进程不结束,但从测试和易维护的角度来说,最实用的方案是通过服务器定时任务来实现。由于配置Linux定时任务会涉及到很多方面的知识,对于Linux不太熟的开发者容易望而却步,本文就以最简单的方式将这种方案实现落地,希望对大家有帮助。

简单理解和实现Linux定时任务(crontab)

流程图

编辑crontab文件

每个用户都拥有自己的crontab文件,文件包含送交守护进程的一系列指令,通常使用下面的命令对该文件进行编辑:

> crontab -e 

默认的编辑器是vim,只需要记住按i可以对文本进行编辑,使用上下左右箭头调整光标位置,按esc退出编辑,退出编辑后键入:wq对文件进行保存即可,就像下面这样:

简单理解和实现Linux定时任务(crontab)

编辑crontab

定时的语法如下:

* * * * * /WWW/learnlinux/sometask.sh 分钟 小时 日 月 星期 命令 

上面的意思是,每1分钟执行一次sometask.sh。5个*号的位置代表的是执行任务的时间,语法是这样的:

“*”代表所有, “/”代表循环周期, “-”代表从某个数字到某个数字的区间, “,”分开几个离散的数字 

最简单的写法如下:

30 * * * * 代表每个小时的第30分钟执行一次 30 6 * * * 代表每天的6点30分执行一次 30 6 15 * * 代表每个月的15号6点30分执行一次 30 6 15 5 * 代表每年的5月15号6点30分执行一次 也可以用星期表示,0代表周日: 30 6 * * 0 代表每个周日的6点30执行一次 

稍微复杂一点:

*/5 * * * * 代表每隔5分钟执行一次 30 6 */5 * * 代表每隔5天就在6点30分执行一次 0 2-5 * * * 代表每天的2点到5点钟的第0分钟执行一次 20,40 * * * * 代表每个小时的第20和第40分钟执行一次 

创建可执行文件

我们既然规定每分钟执行一次sometask.sh那么就到相应的目录下去创建该文件:

> cd /WWW/learnlinux/ > vim sometask.sh 

这里使用vim创建文件,编辑方法上文中有,sometask.sh文件内容如下:

#!/bin/sh curl http://localhost/learnlinux/ 

该文件中第一行为固定写法,第二行用于指定访问的页面URL,curl命令可以以GET的方式访问后面的地址,注意:地址不需要添加引号。你可以将这里的URL修改为实际项目中需要被定时访问的页面。

案例中被访问的页面PHP代码如下:

<?php file_put_contents('timer.log', date('m-d H:i:s', time()).PHP_EOL, FILE_APPEND); 

该页面每次被访问都会将当前时间追加到同目录的日志文件(timer.log)中,主要用于测试前面的代码是否正常执行。注意:需要给该目录创建文件的权限。

上述文件创建成功之后,可以先执行一次sh文件,测试页面是否正常被访问,之后再观察timer.log文件被访问的时间点是否是你所希望的。就像这样:

简单理解和实现Linux定时任务(crontab)

timer.log

再之后你就可以在页面文件里处理你的业务逻辑了,测试的时候可以用#注释crontab文件。这样,虽然PHP不支持定时任务,但通过服务器技术,今后再遇到需要自动处理状态或者做接口队列的项目就简单很多了。

至于window服务器,请去下载各种现成的定时执行程序:)

原文始发于:简单理解和实现Linux定时任务(crontab)


情深几许 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:简单理解和实现Linux定时任务(crontab)
喜欢 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址