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

通过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

配置为开机启动


方法一、修改/etc/rc.local
方法二、chkconfig管理  (/etc/init.d)

备注

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

$ yum -y install dos2unix
$ dos2unix test_task.sh 

原文地址:https://www.cnblogs.com/huligong1234/p/8456955.html

时间: 2024-10-26 11:00:53

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

关于Android中的PollingService定时轮询任务的讲解

1.创建PollingThread类,在log打印出“New message!” class PollingThread extends Thread { @Override public void run() { Log.i("zzf", "Polling..."); } } 2.创建PollingReceiver,用于接收Service传递信息并重新执行PollingService public class PollingReceiver extends Bro

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

logrotate介绍 对于Linux系统安全来说,日志文件是极其重要的工具.日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.当日志文件不断增长的时候,就需要定时切割,否则,写日志的速度和性能也会下降,更不便于我们归档,查询. 所以便有了使用logrotate的时候 ,logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除

商城系统在linux系统中定时备份MySQL数据库并删除七天前的备份文件

数据库是商城软件中重要的组成部分,定时任务能周期性地自动执行中的程序必要的业务逻辑,以DSMall开源商城系统每日店铺结算的业务逻辑为例:!/bin/bash?Name:bakmysql.sh?This?is?a?ShellScript?For?Auto?DB?Backup?and?Delete?old?Backup备份地址backupdir=/home/mysqlbackup备份文件后缀时间time=`?date?+%Y%m%d%H%M%S?<br/>需要备份的数据库名称<br/>

java的定时轮询

ScheduledExecutorService service = Executors.newScheduledThreadPool(10);service.scheduleAtFixedRate(() -> { LocalDateTime start = LocalDateTime.now().withNano(0).minusSeconds(1); LocalDateTime end = LocalDateTime.now().withNano(0); List<String> s

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

前言 如上图所示,Apollo portal 更新配置后,进行轮询的客户端获取更新通知,然后再调用接口获取最新配置.不仅仅只有轮询,还有定时更新(默认 5 分钟一次).目的就是让客户端能够稳定的获取到最新的配置. 一起来看看他的设计. 核心代码 具体的类是 RemoteConfigRepository,每一个 Config -- 也就是 namespace 都有一个 RemoteConfigRepository 对象,表示这个 Config 的远程配置仓库,可以利用这个仓库请求远程服务,得到配置

轮询技术

1.轮询:浏览器不断地向服务器返送ajax请求.配合使用定时函数 setInterval 或者 settimeout 定时发送ajax请求. <script> setInterval(function(){ $.get('server.php',{id:5},function(data){ //根据服务器返回的数据进行下一步操作, }); },300); </script> 2.长轮询(comet):轮询是不断地发送ajax,而长轮询是浏览器发送一次ajax之后,服务器会去搜索数据

并发思想提炼(2)(Lock free,轮询及线程池)

8.    告别Lock 不是一直说Lock比较麻烦危险吗,那就不要好了.其实有一个Lock free的方法. 首先引入一个概念——原子变量.在这种变量上的操作是原子操作(atomic operation).原子操作就是说这个操作要么都完成,要么都不完成,部分完成是不行的.就像物理化学中的原子一样,借用不可再分的意思.按照这样理解,对这个原子变量的访问操作就必定是串行的.一个原子操作完成后才能进行另一个原子操作.这样子的变量类型多半是基本变量,什么int啊double啊boolean啊之类. 就

长轮询实现消息推送

一.应用场景 浏览器与服务器之间保持一个长连接(http链接),服务器有最新的数据生成时及时推送到前端展现.典型场景:新邮件到达通知. 二.业界常用的解决方案 定时轮询,长轮询,websocket(HTML5新增的能力) 其中长轮询兼容性较好,应用的较为广泛,但是切忌在移动网络中应用该技术. 三.长连接前端代码 /** *pns模型层 *@constructs M2012.Model.Pns.PnsModel *@extends Backbone.Model *@example *new M20

架构模式: 轮询发布者

架构模式: 轮询发布者 上下文 你已经采用事务发件箱模式 问题 如何将消息/事件发布到数据库中的发件箱中以发送给消息代理? 要点 结论 通过轮询数据库的发件箱表来发布消息. 结果上下文 这种模式具有以下好处: 适用于任何SQL数据库 这种模式有以下缺点: 不能保证按顺序发布事件 并非所有NoSQL数据库都支持此模式 关联模式 事务发件箱模式创建了对此模式的需求 事务日志跟踪模式是另一种解决方案 原文地址:https://www.cnblogs.com/paxlyf/p/11293742.html