通过Linux定时任务实现定时轮询数据库及发送Http请求

概述

有时需要临时增加一个定时任务(需要根据数据库查询结果然后发送HTTP请求),如果在项目中额外增加(Java+Spring+Quartz),则需要编写很多代码,而且还需要重新编译发布,比较麻烦,特别是在紧急情况下的时候。采用Linux脚本,再加上JSP(根据业务需要),可以比较快的解决问题。

环境准备

  • 安装MySQL Client
  • 安装curl

脚本内容

#!/bin/bash
#
# @file test_task.sh
# @brief test_task
# @author Huligong1234
# @version 0.1
# @date 2018-02-17
# #脚本目录
WORK_DIR=/data/scripts #日志目录
LOG_DIR=${WORK_DIR}/logs/test_task
LOG_FILE_NAME=test_task_`date +%Y%m%d%H`.log
LOG_FILE=${LOG_DIR}/${LOG_FILE_NAME} #MySQL连接信息
MYSQL_HOST="192.168.1.106"
MYSQL_USER="readonly"
MYSQL_PWD="readonly"
MYSQL_DATABASE="myproj" #目标HTTP地址
SENDTO_NOTIFY_URL="http://192.168.1.106:8081/notify/notify.jsp"
#SENDTO_NOTIFY_URL="http://api.domain.com/notify/notify.jsp" #查询数据获得目标ID集合
idList=`mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PWD $MYSQL_DATABASE <<EOF | tail -n +2
SELECT t.tx_no
FROM t_app_log t
WHERE t.create_date BETWEEN DATE_SUB(NOW(),INTERVAL 5 MINUTE) AND NOW()
AND t.result_code='SUCCESS'
ORDER BY t.create_date DESC
LIMIT 50;
EOF` #迭代集合,通过curl逐个发送HTTP请求
for tid in $idList;
do
echo `date '+%Y-%m-%d %H:%M:%S'` [$tid] `curl -o /dev/null -s -m 3 --connect-timeout 3 -w %{http_code} "${SENDTO_NOTIFY_URL}?tx_no=$tid"` >> ${LOG_FILE}
done

crontab配置(每分钟执行一次)

$ crontab -e #编辑
$ crontab -l #查看
0 0 * * * /bin/bash /usr/local/tengine/logs/cut-log.sh
*/1 * * * * /bin/bash /data/scripts/test_task.sh
00 12 * * * /sbin/ntpdate cn.pool.ntp.org

备注

如果脚本是在Windows环境下编写,拷贝到Linux环境下时可能会提示换行符等错误信息,
可以通过安装dos2unix命令转换: $ yum -y install dos2unix
$ dos2unix test_task.sh

通过Linux定时任务实现定时轮询数据库及发送Http请求的更多相关文章

  1. SqlCacheDependency轮询数据库表的更改情况的频率

    下面的示例向 ASP.NET 应用程序添加一个 SqlCacheDependency.   <sqlCacheDependency enabled="true" pollTi ...

  2. linux 日志定时轮询流程详解(logrotate)

    logrotate介绍 对于Linux系统安全来说,日志文件是极其重要的工具.日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.当日志文件不断增长的时候,就需要定 ...

  3. Linux 使用crontab定时备份Mysql数据库

    项目中数据库的数据是至关重要的!在实际项目中,遇到有客户机房断电导致数据库数据丢失的问题,又因为备份容灾不及时,导致部分数据恢复不了,而刚好这部分丢失的数据对于客户来说又是至关重要的,那么怎么办呢?盲 ...

  4. Celery beat实现定时/轮询任务

    Celery定时任务 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE .  Celery的定时任务都由celery beat来进行调度.celery beat默认按照s ...

  5. django 异步任务实现及Celery beat实现定时/轮询任务

    Celery定时任务 requirements celery==3.1.25 异步任务 django-celery==3.2.2 定时任务管理包 redis==2.10.6 django-redis- ...

  6. 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_220 定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单.卡单的情况,账单变成了 ...

  7. Apollo 3 定时/长轮询拉取配置的设计

    前言 如上图所示,Apollo portal 更新配置后,进行轮询的客户端获取更新通知,然后再调用接口获取最新配置.不仅仅只有轮询,还有定时更新(默认 5 分钟一次).目的就是让客户端能够稳定的获取到 ...

  8. polling轮询和comet

    comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...

  9. 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室

    实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSoc ...

随机推荐

  1. Topcoder SRM 601 div1题解

    日常TC计划- Easy(250pts): 题目大意:有n个篮子,每个篮子有若干个苹果和橘子,先任取一个正整数x,然后从每个篮子中选出x个水果,把nx个水果放在一起,输出一共有多少种不同的组成方案.其 ...

  2. 输出读入优化——QAQ

    #include<bits/stdc++.h> const int RN=1e5; ],*ip=ib+RN,ob[RN+],*op=ob; inline int gc(){ ip==ib+ ...

  3. C++中的 Round(),floor(),ceil()

     2.1             2.6               -2.1               -2.6floor : 不大于自变量的最大整数             2          ...

  4. [字符串] StartWith和EndWith效率比较低

    之前无意中看到有人提到StartWith和EndWith效率比较低,今天恰好有用到这样的场景,于是写了个测试验证一下. 该示例仅在比较字符串首尾单个字符,用途有限. var str = "\ ...

  5. git 之gitignore 添加项之后生效的问题

    .gitjignore 文件是在团队项目中上传到云端的的规则文件,主要是写些规则过滤掉某些文件夹或者文件 一,过滤规则 由于我用webstrom 通常会生成一些日志文件 /.idea/   过滤整个文 ...

  6. 《Linux命令、编辑器与shell编程》第三版 学习笔记---003 使用multibootusb

    1.下载文件https://codeload.github.com/mbusb/multibootusb-8.9.0.tar.gz,使用命令: tar xvf multibootusb-8.9.0.t ...

  7. 27.Remove Element---两指针

    题目链接:https://leetcode.com/problems/remove-element/description/ 题目大意:给出一个数组和一个值,从数组中删除与当前值相等的值,并将数组长度 ...

  8. 删除 Myeclipse 遗留的 workspace

    有时因需要而创建多个 workspace 并在它们之间切换,但是如果某些 workspace 内容被物理删除(不再需要)后,当你点击 File --> Switch Workspace 时,旧的 ...

  9. Vue.js 2使用中的难点举例--子组件,slot, 动态组件,事件监听

    一例打尽..:) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. AC日记——[HAOI2007]覆盖问题 bzoj 1052

    1052 思路: 二分答案: 二分可能的长度: 然后递归判断长度是否可行: 先求出刚好覆盖所有点的矩形: 可行的第一个正方形在矩形的一个角上: 枚举四个角上的正方形,然后删去点: 删去一个正方形后,递 ...