tomcat監控指令碼(監控程序,測試介面,告警動作為傳送郵件)
伺服器環境:centos7.2 64位 tomcat8.5.6
tomcat 監控功能共需要兩個指令碼,如下:
initMonitor.sh
#!/bin/sh
#初始化監控指令碼相關變數
export tomcat_name=apache-tomcat-8.5.6
export tomcat_home=/usr/local/apache-tomcat-8.5.6
#測試介面訪問地址
export webUrl=127.0.0.1:8080/yanglao/sysUserController/sysTest
#監控指令碼日誌路徑
export tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log
export [email protected]
#執行tomcat監控指令碼
#獲取當前指令碼所在目錄
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
$baseDirForScriptSelf/tomcatMonitor.sh
tomcatMonitor.sh
#!/bin/sh
# 獲取tomcat程序ID /usr/local/tomcat_ds_api
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
# tomcat啟動程式
StartTomcat=$tomcat_home/bin/startup.sh
# 日誌輸出
if [ -f $tomcatMonitorLog ]; then
echo "日誌檔案已建立"
else
echo "日誌檔案為建立,馬上建立!"
touch $tomcatMonitorLog
fi
#tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log
TryConnection(){
echo $tomcat_name
echo '$tomcat_name'
TryTomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name |grep -v 'grep'|awk '{print $2}')
echo "[info]開始重新檢視tomcat程序:$TryTomcatID...[$(date +'%F %H:%M:%S')]"
if [[ $TryTomcatID ]];then
echo "[info]當前tomcat程序ID為:$TryTomcatID,繼續重新檢測介面..."
# 檢測是否啟動成功(成功的話介面會返回狀態"200")
TomcatServiceCodeTry=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code})
if [[ $TomcatServiceCodeTry -eq 200 ]];then
echo "[info]系統介面返回碼為$TomcatServiceCodeTry,tomcat重啟成功,訪問系統介面正常......"
echo "[error]傳送告警關閉郵件"
echo "tomcat重啟成功,訪問系統介面正常 [$(date +'%F %H:%M:%S')]"|mail -s "智慧養老專案告警關閉" $email_address
else
sleep 30
TryConnection
fi
else
sleep 30
TryConnection
fi
}
Monitor()
{
echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]"
if [[ $TomcatID ]];then # 這裡判斷TOMCAT程序是否存在
echo "[info]當前tomcat程序ID為:$TomcatID,繼續檢測系統介面..."
# 檢測是否啟動成功(成功的話介面會返回狀態"200")
TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code})
if [[ $TomcatServiceCode -eq 200 ]];then
echo "[info]介面返回碼為$TomcatServiceCode,tomcat執行正常,訪問系統介面正常......"
else
echo "[error]訪問系統接口出錯,請注意......狀態碼為$TomcatServiceCode"
echo "[error]訪問系統接口出錯,開始重啟tomcat"
echo "[error]傳送告警開啟郵件"
echo "由於訪問系統接口出錯,tomcat開始自動重啟 [$(date +'%F %H:%M:%S')]"|mail -s "智慧養老專案告警開啟" $email_address
kill -9 $TomcatID # 殺掉原tomcat程序
sleep 3
rm -rf $TomcatCache # 清理tomcat快取
$StartTomcat
sleep 3m
TryConnection #檢查是否啟動成功
fi
else
echo "[error]tomcat程序不存在!tomcat開始自動重啟..."
echo "[info]$StartTomcat,請稍候......"
echo "[error]傳送告警開啟郵件"
echo "由於tomcat程序不存在 tomcat開始自動重啟 [$(date +'%F %H:%M:%S')]"|mail -s "智慧養老專案告警開啟" $email_address
rm -rf $TomcatCache
$StartTomcat
sleep 3m
TryConnection #檢查是否啟動成功
fi
echo "------------------------------"
}
Monitor>>$tomcatMonitorLog
前期準備:
- 安裝crontab
- 配置郵件傳送環境
指令碼介紹:
- initMonitor.sh中可配置指令碼中使用的變數,除引數配置外,此指令碼中將呼叫tomcatMonitor.sh,此指令碼再次呼叫的原因是export所設定的變數,僅在該shell以及它的子shell中有效。
- tomcatMonitor.sh為tomcat監控的業務邏輯指令碼
使用說明:
1.將initMonitor.sh,tomcatMonitor.sh兩個指令碼放入伺服器同級目錄下(如:/usr/bin/yanglao)
2.如需配置指令碼對應變數,請編輯initMonitor.sh,不需要更改的可跳過此步
3.使用crontab設定定時執行initMonitor.sh:
1)# crontab -e
2 )插入/5 * * * /usr/bin/yanglao/initMonitor.sh
3)#systemctl reload crond
#systemctl restart crond
經過以上操作,指令碼即可執行,開始檢測tomcat。
檢測範圍:tomcat程序關閉 , 系統介面無法訪問
告警動作:傳送郵件至initMonitor.sh設定的郵件,並重啟tomcat。
重啟後對tomcat重新進行檢測,檢測執行正常後,傳送告警關閉郵件
分界線———–更於2017.08.07
由於最近開發的產品總是莫名其妙掛掉(我懷疑是我關了忘啟動。。。),決定為該產品新增監控指令碼。由於產品是直接面對普通使用者的,為防止指令碼因為莫名其妙的問題反覆重啟專案,故將專案啟動部分去掉,改為只負責監控,不對專案執行任何操作。
另外本次遇到的另一個蛋疼的問題是阿里雲不允許通過smtp協議直接走25埠傳送郵件,我又是個Linux菜雞,實在沒找到linux通過smtp協議傳送郵件的方法,只能繞個路,通過java打jar包去傳送smtps協議的郵件了。。。。送上程式碼:
initMonitor-wechat.sh
#!/bin/sh
#初始化監控指令碼相關變數
export tomcat_name=/data/apache-tomcat-7.0.75
export tomcat_home=/data/apache-tomcat-7.0.75
#測試介面訪問地址
#export webUrl=http://www.test.com/test
#監控指令碼日誌路徑
export tomcatMonitorLog=/data/tomcatMonitor/log/tomcatMonitor-wechat.log
#export [email protected]
#執行tomcat監控指令碼
#獲取當前指令碼所在目錄
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
echo $baseDirForScriptSelf
$baseDirForScriptSelf/tomcatMonitor-wechat.sh
tomcatMonitor-wechat.sh
#!/bin/sh
# 日誌輸出
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
if [ -f $tomcatMonitorLog ]; then
echo "日誌檔案已建立"
else
echo "日誌檔案為建立,馬上建立!"
touch $tomcatMonitorLog
fi
Monitor()
{
echo "[info]開始監控$tomcat_home...[$(date +'%F %H:%M:%S')]"
if [[ $TomcatID ]];then # 這裡判斷TOMCAT程序是否存在
echo "[info]當前$tomcat_home程序ID為:$TomcatID,繼續檢測系統介面..."
# 檢測是否啟動成功(成功的話介面會返回狀態"200")
TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 http://wx.test.com/bxg/user/login -o /dev/null -w %{http_code})
if [[ $TomcatServiceCode -eq 200 ]];then
echo "[info]介面返回碼為$TomcatServiceCode,$tomcat_home.執行正常,訪問系統介面正常......"
else
echo "[error]訪問系統接口出錯,請注意......狀態碼為$TomcatServiceCode"
echo "[error]傳送告警開啟郵件"
echo "訪問系統接口出錯[$(date +'%F %H:%M:%S')]"
/data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jar
echo "訪問系統接口出錯[$(date +'%F %H:%M:%S')]"
fi
else
echo "[error]$tomcat_home程序不存在!"
echo "[error]傳送告警開啟郵件"
echo "$tomcat_home程序不存在 [$(date +'%F %H:%M:%S')]"
/data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jar
echo "$tomcat_home程序不存在 [$(date +'%F %H:%M:%S')]"
fi
echo "------------------------------"
}
Monitor>>$tomcatMonitorLog
使用java通過smtps協議傳送Email的程式碼
wechat.jar
import java.security.Security;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static boolean sendMailBySSL(String email) throws AddressException, MessagingException{
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// Get a Properties object
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.test.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
final String username = "[email protected]";
final String password = "test";
Session session = Session.getDefaultInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}});
// -- Create a new message --
Message msg = new MimeMessage(session);
// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress("[email protected]"));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(email,false));
msg.setSubject("後臺管理告警開啟");
SimpleDateFormat formatter;
formatter = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss z");
msg.setText("後臺管理告警開啟 ["+formatter.format(new Date())+"],請及時處理");
msg.setSentDate(new Date());
Transport.send(msg);
System.out.println("Message sent.");
return true;
}
public static void main(String[] args) throws AddressException, MessagingException {
sendMailBySSL("[email protected]");
}
}
該程式碼塊引用了mail-1.4.jar
相關推薦
tomcat監控指令碼(監控程序,測試介面,告警動作為傳送郵件)
伺服器環境:centos7.2 64位 tomcat8.5.6 tomcat 監控功能共需要兩個指令碼,如下: initMonitor.sh #!/bin/sh #初始化監控指令碼相關變數 export tomcat_name=apac
zabbix-自定義監控項(監控網站80連接數)
zabbix 添加監控項 監控網站並發數 自定義監控項(監控網站80連接數) 需求:監控某臺web的80端口連接數,並出圖; 第一步:客戶端創建腳本: 客戶端定義腳本,並編輯zabbix-agent配置文件實現運行定義的腳本; 客戶端設置 vim /usr/local/sbin/estab.s
用python3 SVM訓練測試預測文字摘要(中文)(分句,分詞,詞典,詞袋,測試建模,預測)
使用SVM 訓練和預測,需要正確的資料: X:儲存特徵。可以是二維矩陣,如:[ [c1 ,c2, c3…] ,[…],…];也可以是這樣的形式[{a1:c1,a2:c2,a3:c3…},{…} …],c1,c2…表示特徵值a1,a2,a3…表示詞位置(詞在le
在Ubuntu14.04下安裝 ffmpeg-2.4.13(處理視頻用,將視頻保存為圖片序列)
ibm blog 提取 ext aac sta video images bmp 首先在 http://www.ffmpeg.org/olddownload.html 下載 ffmpeg-2.4.13.tar.bz2 ; 然後安裝 yasm 和 libx264: apt
【spring mvc】後臺的API,測試中,總提示接口實體的某一個字段不能為null,但是明明給值了還提示不能為空
ont TP 報錯 分享 ima 技術 技術分享 圖片 request 實體是這三個字段 接口的實現類Controller 前臺測試給值 依舊報錯 解決方法: 需要添加@RequestBody註解 【spring mvc】後臺的API,
Swift:我的第二個Demo(textField實現一個登入介面,沒有完成點選空白鍵盤)
檔名:AppDelegate.swift import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func
Angular6 配置專案開發環境,測試環境,生產環境
搜過很多文章說的都是關於Angular4的配置,後面自己又找了許多資料,最後總結了Angular6 如何配置開發環境,測試環境,生產環境: 1、在environments資料夾裡新建三個檔案: //生產環境 environment.prod.ts: export const enviro
關於測試策略,測試方針,測試計劃,測試方案的理解
技術 就會 什麽 ali 是否有效 軟件 是否 width 計劃 一.什麽是測試策略 簡單來說就是,測什麽,怎麽測。 一般可以歸納為6個問題 1)測試的對象和範圍是什麽? 2)測試的目標是什麽? 3)測試的深度到哪裏,廣度又到哪裏? 4)測試的重點
webstorm啟用碼,永久有效,測試可用,更新時間2018.10.20
2RRJMBXW33-eyJsaWNlbnNlSWQiOiIyUlJKTUJYVzMzIiwibGljZW5zZWVOYW1lIjoi5b285bK4IHNvZnR3YXJlMiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiI
PostMan測試介面,傳送Get,Post請求
我現在的專案開發是前後臺分離的,所以在寫介面的時候,是需要自己測試一下的,測試工具就是PostMan,第一次接觸,也是百度,檢視部落格。所以自己乾脆寫個全一點的,也讓其他人有個參考,寫的不對多多指正哈; 下面Postman工具介紹一點,簡單的大家
jmeter測試介面,跟jenkins整合實現自動推送郵件報告
jmeter我之前沒用過,後來學習測試api,發現很方便,因而做一個記錄。 在mac上安裝jmeter,首先需要在官網下載安裝外掛,然後配置環境,為了實現跟jenkins整合,也下載了ant。環境搭建好以後,應該是這樣的狀態。 export ANDROID_HOME=/U
免費的https、http介面,測試介面可以使用
本文轉自:https://blog.csdn.net/ak341221/article/details/61205789 2017年03月10日 20:30:18 凡人不羨仙 閱讀數:19013 標籤: https免費介面http免費介面免費可用的網路介面
Loadrunner11的使用圖解,測試併發,效能等的具體步驟
每次開啟電腦都需要破解一次Lr,漢化版的有問題,建議使用英文版的。我測試的環境是Windows7+IE8+LR11。(在Windows10上試過,谷歌和IE11都不能正常執行),以下我會具體來操作,最終獲得併發的集合點圖,和事務響應圖。 首先建立指令碼,如下圖 編輯錄制
Http免費測試介面,小白學習必備
電商介面 京東獲取單個商品價格介面: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 ps:商品ID這麼獲取:http://item.jd.com/954086.html 物流介面 快遞介面: htt
loadrunner測試介面,將結果寫入日誌檔案
Action()中使用web_custom_request()方法傳送請求或者F1檢視web_custom_request的使用技巧Action() { web_custom_request( "court_user", //這個是給請求起個名稱,在樹形圖中顯示,不影
訓練集,測試集,檢驗集的區別與交叉檢驗
前言 在機器學習中,不可避免要接觸到訓練集,測試集以及檢驗集,這些資料集各有各的作用,為機器學習演算法的泛化保駕護航,這裡結合《Deep Learning》中的關於訓練集,測試集和檢驗集的討論,淺談所見所學。 如有謬誤,請聯絡指正。轉載請註明出處。 聯絡方
阿里雲部署Fabric網路,測試e2e_cli,出錯處理
部署Fabric,跑e2e_cli的時候,執行network_setup.sh up,出現錯誤 配置錯誤彙總 錯誤:sign
柔性電子綜述2012 ---在醫療,汽車行業,人機介面,移動裝置以及其他場景下的可能應用
Flexible Electronics: The Next Ubiquitous Platform 雜誌: PROCEEDINGS OF THE IEEE author: Arokia Nathan 2012的一篇柔性電子的綜述,主要講述柔性電子領域的薄膜材料和技術,以及思考未
阿里雲ECS遮蔽25埠,官方建議使用465 SSL埠傳送郵件
阿里雲ECS VPC網路,搭建了zabbix,想通過三方郵件系統傳送郵件,本機開虛擬機器測試發郵件一切正常,到阿里ECS的時候郵件各種發不出去,到處找原因,最後度娘告訴了我真想,原來阿里把25埠遮蔽了。 嘗試解封,呵呵...繼續找度娘 谷哥,說是可以繞開25埠,用465埠,步驟如下(先不要操作,
node搭建伺服器,寫介面,調介面,跨域
剛開始學node,今天做這個也是累死寶寶了,以後可以自己寫介面自己用了,再也不用麻煩人家後端人員了,這些年我們欠他們的太多了,說多了都是淚,不多說,往下看吧。。。 服務端專案目錄下: 1、npm init 建立package.json檔案; 2、建立一個app.js檔案