如何利用Linux中的crontab实现分布式项目定时任务功能
小编给大家分享一下如何利用Linux中的crontab实现分布式项目定时任务功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
认识crond服务
1、crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类:
①系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
②个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
2、Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:
①/etc/cron.deny 该文件中所列的用户不允许使用Crontab命令
②/etc/cron.allow 该文件中所列的用户允许使用Crontab命令
3、/var/spool/cron/ 是所有用户的crontab文件
4、启动、停止、查看crond服务:
①启动:service crond start
②停止:service crond stop
③查看:service crond status
@Controller @RequestMapping("/task/topic") publicclassTopicQuartzController{ protectedLoggerlogger=LoggerFactory.getLogger(TopicQuartzController.class); @Autowired privateLiveTopicServiceliveTopicService; @RequestMapping("execute") @ResponseBody publicCommonResultexecute(HttpServletRequestrequest,HttpServletResponseresponse,Stringtype){ longt1=System.currentTimeMillis(); logger.error("topic定时器执行开始"+type); CommonResultresult=newCommonResult(); if(QlchatUtil.isEmpty(type)){ result.setMsg("参数为空"); result.setSuccess(false); returnresult; } try{ switch(type){ case"autoEndTopic": this.autoEndTopic(); break; case"oneWeek": this.endTopicOneWeek(); break; default: break; } result.setSuccess(true); result.setMsg("执行完成"+type); }catch(Exceptione){ logger.error("topic定时器执行异常"+type,e); result.setMsg("topic定时器执行异常"+type); result.setSuccess(false); } longt2=System.currentTimeMillis(); logger.error("topic定时器执行结束"+type+",耗时="+(t2-t1)+"ms"); returnresult; } privatevoidautoEndTopic(){ Stringsql="SELECTid_topicIdFROMskg_live_topicltWHERElt.`status_`='beginning'ANDlt.end_time_ISNOTNULLANDlt.`end_time_`<NOW()"; JdbcTemplatejdbcTemplate=SpringHelper.getBean(JdbcTemplate.class); List<Map<String,Object>>resultMap=jdbcTemplate.queryForList(sql); for(Map<String,Object>map:resultMap){ StringtopicId=String.valueOf(map.get("topicId")); try{ LiveTopicPoliveTopicPo=liveTopicService.loadCache(topicId); liveTopicService.endTopic(liveTopicPo,liveTopicPo.getCreateBy()); }catch(Exceptione){ logger.error("autoEndTopic异常"+topicId,e); } } } /** *结束之前的没有结束时间的话题,只跑一周 */ privatevoidendTopicOneWeek(){ Stringsql="SELECTid_topicIdFROMskg_live_topicltWHERElt.`status_`='beginning'ANDlt.end_time_ISNULLANDlt.start_time_<=(NOW()-interval48hour)"; JdbcTemplatejdbcTemplate=SpringHelper.getBean(JdbcTemplate.class); List<Map<String,Object>>resultMap=jdbcTemplate.queryForList(sql); for(Map<String,Object>map:resultMap){ StringtopicId=String.valueOf(map.get("topicId")); try{ LiveTopicPoliveTopicPo=liveTopicService.loadCache(topicId); liveTopicService.endTopic(liveTopicPo,liveTopicPo.getCreateBy()); }catch(Exceptione){ logger.error("autoEndTopic异常"+topicId,e); } } } }
像上面这样写好定时任务的逻辑类
创建一个contab.txt
*/30****curl'http://10.47.161.40:8181/task/topic/execute.do?type=oneWeek' */30****curl'http://10.47.161.40:8181/task/topic/execute.do?type=autoEndTopic'
里面这样调用方法去执行即可实现分布式项目的定时任务
上面即每30分钟执行一次
以上是“如何利用Linux中的crontab实现分布式项目定时任务功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
linux怎么搭建ftp服务器(linux ftp命令)
linuxftp命令?很欢喜问本问题,此观点祝你好运吧!再连接ftp服务器。格式:ftp[hostname|ip-address...
-
linux怎么调出屏幕键盘(linux | 怎么打出来,管道符号怎么打)
linux|怎么打出来,管道符号怎么打?楼主,你好!“|”这个符号在linux环境称做“管道符”框输入方法:Shift键盘的“...
-
linux系统生成core文件(linux udp缓存配置)
linuxudp缓存配置?临时再添加:sysctl-w_max26214400无限制再添加:将以下行添加到中:_max26214...
-
linux Centos如何安装PHP7
linuxCentos如何安装PHP7今天小编给大家分享一下li...
-
干了10多年的php,还不会安装,是不是丢人
-
Linux编程的十大代码编辑器新鲜出炉,你用的入榜单了吗?
-
从7到8,CentOS又更新了什么
-
PHP程序员的技术成长规划-基础阶段篇
-
Linux curl命令
Linuxcurl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但...
-
CentOS和RedHat下8个最常用的YUM库