經過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

備註

若是腳本是在Windows環境下編寫,拷貝到Linux環境下時可能會提示換行符等錯誤信息,
能夠經過安裝dos2unix命令轉換:

$ yum -y install dos2unix 
$ dos2unix test_task.sh
相關文章
相關標籤/搜索