国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 庆云县| 五指山市| 太和县| 古丈县| 北川| 梁山县| 汨罗市| 阳原县| 五家渠市| 同江市| 南安市| 克什克腾旗| 周宁县| 合水县| 大关县| 玛沁县| 马公市| 西和县| 临猗县| 奎屯市| 浮梁县| 田林县| 安新县| 资源县| 隆林| 大兴区| 汶上县| 平原县| 梁山县| 遂川县| 大同市| 邢台县| 新巴尔虎左旗| 元氏县| 甘德县| 修水县| 泗水县| 海阳市| 商都县| 土默特右旗| 鸡东县|