内容简介:crond是Linux用来定期执行程序的命令.这篇文章主要介绍了利用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") public class TopicQuartzController { protected Logger logger = LoggerFactory.getLogger(TopicQuartzController.class); @Autowired private LiveTopicService liveTopicService; @RequestMapping("execute") @ResponseBody public CommonResult execute(HttpServletRequest request,HttpServletResponse response,String type){ long t1 = System.currentTimeMillis(); logger.error("topic定时器执行开始"+type); CommonResult result = new CommonResult(); if(QlchatUtil.isEmpty(type)){ result.setMsg("参数为空"); result.setSuccess(false); return result; } try { switch (type) { case "autoEndTopic": this.autoEndTopic(); break; case "oneWeek": this.endTopicOneWeek(); break; default: break; } result.setSuccess(true); result.setMsg("执行完成" + type); } catch (Exception e) { logger.error("topic定时器执行异常" + type, e); result.setMsg("topic定时器执行异常" + type); result.setSuccess(false); } long t2 = System.currentTimeMillis(); logger.error("topic定时器执行结束"+type+",耗时="+(t2 - t1) + "ms"); return result; } private void autoEndTopic(){ String sql = "SELECT id_ topicId FROM skg_live_topic lt WHERE lt.`status_` = 'beginning' AND lt.end_time_ IS NOT NULL AND lt.`end_time_` < NOW()"; JdbcTemplate jdbcTemplate = SpringHelper.getBean(JdbcTemplate.class); List<Map<String, Object>> resultMap = jdbcTemplate.queryForList(sql); for (Map<String, Object> map : resultMap) { String topicId = String.valueOf(map.get("topicId")); try { LiveTopicPo liveTopicPo = liveTopicService.loadCache(topicId); liveTopicService.endTopic(liveTopicPo, liveTopicPo.getCreateBy()); }catch (Exception e){ logger.error("autoEndTopic异常" + topicId, e); } } } /** * 结束之前的没有结束时间的话题,只跑一周 */ private void endTopicOneWeek(){ String sql = "SELECT id_ topicId FROM skg_live_topic lt WHERE lt.`status_` = 'beginning' AND lt.end_time_ IS NULL AND lt.start_time_ <= (NOW() - interval 48 hour)"; JdbcTemplate jdbcTemplate = SpringHelper.getBean(JdbcTemplate.class); List<Map<String, Object>> resultMap = jdbcTemplate.queryForList(sql); for (Map<String, Object> map : resultMap) { String topicId = String.valueOf(map.get("topicId")); try { LiveTopicPo liveTopicPo = liveTopicService.loadCache(topicId); liveTopicService.endTopic(liveTopicPo, liveTopicPo.getCreateBy()); }catch (Exception e){ 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分钟执行一次
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 利用Zookeeper实现 - 分布式锁
- 利用ZooKeeper实现分布式锁
- 利用ZooKeeper简单实现分布式锁
- [Python]利用ZooKeeper构建分布式定时任务
- 利用Prometheus 打造企业分布式监控平台(2)--服务发现
- 利用Prometheus 打造企业分布式监控平台(1)--扩展性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript编程精解
Marijn Haverbeke / 徐涛 / 机械工业出版社华章公司 / 2012-10-1 / 49.00元
如果你只想阅读一本关于JavaScript的图书,那么本书应该是你的首选。本书由世界级JavaScript程序员撰写,JavaScript之父和多位JavaScript专家鼎力推荐。本书适合作为系统学习JavaScript的参考书,它在写作思路上几乎与现有的所有同类书都不同,打破常规,将编程原理与运用规则完美地结合在一起,而且将所有知识点与一个又一个经典的编程故事融合在一起,读者可以在轻松的游戏式......一起来看看 《JavaScript编程精解》 这本书的介绍吧!