内容简介: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)--扩展性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java语言精粹
Jim Waldo / 王江平 / 电子工业出版社 / 2011-6 / 39.00元
这是一本几乎只讲java优点的书。 Jim Waldo先生是原sun微系统公司实验室的杰出工程师,他亲历并参与了java从技术萌生、发展到崛起的整个过程。在这《java语言精粹》里,jim总结了他所认为的java语言及其环境的诸多精良部分,包括:类型系统、异常处理、包机制、垃圾回收、java虚拟机、javadoc、集合、远程方法调用和并发机制。另外,他还从开发者的角度分析了在java技术周围......一起来看看 《Java语言精粹》 这本书的介绍吧!