国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

利用Linux中的crontab實現(xiàn)分布式項目定時任務功能

2020-07-27 18:49:20
字體:
來源:轉載
供稿:網(wǎng)友

認識crond服務

    1、crond是Linux用來定期執(zhí)行程序的命令。當安裝完成操作系統(tǒng)之后,默認便會啟動此任務調度命令。crond命令每分鍾會定期檢查是否有要執(zhí)行的工作,如果有要執(zhí)行的工作便會自動執(zhí)行該工作。而Linux任務調度的工作主要分為以下兩類:

  ①系統(tǒng)執(zhí)行的工作:系統(tǒng)周期性所要執(zhí)行的工作,如備份系統(tǒng)數(shù)據(jù)、清理緩存

  ②個人執(zhí)行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置

 2、Crontab是UNIX系統(tǒng)下的定時任務觸發(fā)器,其使用者的權限記載在下列兩個文件中:

  ①/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定時器執(zhí)行開始"+type);    CommonResult result = new CommonResult();    if(QlchatUtil.isEmpty(type)){      result.setMsg("參數(shù)為空");      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("執(zhí)行完成" + type);    } catch (Exception e) {      logger.error("topic定時器執(zhí)行異常" + type, e);      result.setMsg("topic定時器執(zhí)行異常" + type);      result.setSuccess(false);    }    long t2 = System.currentTimeMillis();    logger.error("topic定時器執(zhí)行結束"+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);      }    }  }}

像上面這樣寫好定時任務的邏輯類 

創(chuàng)建一個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'

里面這樣調用方法去執(zhí)行即可實現(xiàn)分布式項目的定時任務 

上面即每30分鐘執(zhí)行一次

總結

以上所述是小編給大家介紹的利用Linux中的crontab實現(xiàn)分布式項目定時任務功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 区。| 苍山县| 通河县| 珲春市| 横山县| 鄂州市| 华蓥市| 汤阴县| 南阳市| 同仁县| 清苑县| 黑山县| 富阳市| 灌南县| 调兵山市| 钟山县| 崇明县| 西贡区| 电白县| 寿光市| 磴口县| 阳山县| 通榆县| 焦作市| 盐津县| 岢岚县| 花莲县| 宝坻区| 宁武县| 社会| 青州市| 九江县| 宣城市| 泸定县| 达孜县| 太谷县| 阿勒泰市| 卓资县| 南康市| 隆回县| 泾川县|