認識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);
ListMapString, Object>> resultMap = jdbcTemplate.queryForList(sql);
for (MapString, 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);
ListMapString, Object>> resultMap = jdbcTemplate.queryForList(sql);
for (MapString, 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分鐘執行一次
總結
以上所述是小編給大家介紹的利用Linux中的crontab實現分布式項目定時任務功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:- Linux crontab定時任務配置方法(詳解)
- linux使用crontab實現PHP執行計劃定時任務
- linux定時任務crontab 實現每秒執行一次的方法
- Linux中crontab定時任務不執行的原因
- Linux定時任務Crontab詳解(推薦)
- 詳細介紹Linux的定時任務crontab
- 詳解linux下利用crontab創建定時任務
- Linux中使用crontab命令啟用自定義定時任務實例
- Linux定時任務的設置及 crontab 配置指南
- linux如何利用crontab添加定時任務詳解