docker容器監控自動恢復

關于實現對docker容器監控以及自動恢復,這里介紹兩種實現方案。

方案1:

實現思路
找到(根據正則表達式)所有待監控的docker容器,此處篩選邏輯根據docker運行狀態找到已停止(Exit)類型的容器

代碼清單1:

#!/bin/bash# 獲取時間信息,格式為:"年-月-日T時:分:秒"
ctime1=`date +%Y-%m-%dT%k:%M:%S`echo "--------------------------------------------------- Script start at : $ctime1 "# 正則表達式匹配所有已biz-aaa/biz-bbb/biz-ccc開頭,且以":v9"結尾的鏡像名,結果中排除容器"container_to_be_excluded",獲取位于索引為18位置上的docker名稱
#set1=($(sudo docker ps -a | grep -E "biz-(aaa|bbb|ccc).*:v9" | grep -v ' container_to_be_excluded' | awk '{print $18}'))# 正則表達式匹配所有已biz-aaa/biz-bbb/biz-ccc開頭,且以":v9"結尾的鏡像名,且進一步過濾出已停止的容器(status = "Exit"),此時其docker名位于索引為16的位置處
set1=($(sudo docker ps -a | grep -E "biz-(aaa|bbb|ccc).*:v9" | grep "Exit" | awk '{print $16}'))# 獲取數組長度
set1_size=${#set1[@]}# A).判斷數組長度是否為0,注意數字的判斷請使用:
##  -eq : 相等
##  -ne : 不同
# B).如果判斷字符串,則為:
##  =   : 相等
##  !=  : 不同
if [[ $set1_size -eq 0 ]]; thenecho ">>>> All business docker processes are health!"
else echo ">>>> Some business docker processes are not health, will be restarted!"sleep 60;# 迭代數組,可以使用${set1[@]},或${set1[?]}# for循環如果一行搞定,可以這樣使用: for i in ${set1[@]};do ${CODE_LOGICAL}; donefor i in ${set1[@]};do echo ">>>>>>>> Docker instance - $i will be restarted right now"echo ">>>>>>>> Will execute command : docker restart $i"docker restart $i# Wait some time for resource to be releasedsleep 30# Re-check if docker process is upset2=($(sudo docker ps -a | grep $i | grep "Exit" | awk '{print $16}'))set2_size=${#set2[@]}if (( set2_size != 0 )); then docker restart $ifidonefictime2=`date +%Y-%m-%dT%k:%M:%S`
echo "--------------------------------------------------- Script end   at : $ctime2 "

方案2:

實現思路
找到(根據正則表達式)所有待監控的docker容器,"docker ps -a"匹配出所有需要監控的容器列表,"docker ps"匹配出當前存活的容器列表,差集即為有問題需要重啟的容器

代碼清單2:

#!/bin/bashset1=($(sudo docker ps -a | grep -E "biz-(aaa|bbb|ccc).*:v9" | grep -v ' container_to_be_excluded' | awk '{print $18}'))
set2=($(sudo docker ps | grep -E "biz-(aaa|bbb|ccc).*:v9" | grep -v ' container_to_be_excluded' | awk '{print $18}'))set1_size=${#set1[@]}
set2_size=${#set2[@]}# Sort sets
printf "%s\n" "${set1[@]}" | sort > set1_sorted.txt
printf "%s\n" "${set2[@]}" | sort > set2_sorted.txtdifference=($(comm -23 set1_sorted.txt set2_sorted.txt))if [[ $set1_size -eq $set2_size ]]; thenecho ">>>> All business docker processes are health!"
else echo ">>>> Some business docker processes are not health, will be restarted!"for i in ${difference[@]};do echo ">>>>>>>> Docker instance - $i will be restarted right now"docker restart $i#echo "-------------------------" $idonefirm -f set1_sorted.txt set2_sorted.txt

配置crontab調度,實現簡單定時調度

crontab -e : 編輯crontab
查看已配置的crontab:crontab -l

*/10 * * * * /aaa/bbb/my_docker_ha.sh >> /aaa/bbb/logs/my_docker_ha.log 2>&1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78319.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HackMyVM - Chromee靶機

HackMyVM - chromee靶機https://mp.weixin.qq.com/s/hF09_24PRXpx_lmB6dzWVg

Cursor中調用本地大語言模型

引言 隨著大語言模型(LLM)技術的快速發展,越來越多的開發者希望在本地環境中運行這些強大的AI模型,以獲得更好的隱私保護、更低的延遲以及不依賴網絡連接的使用體驗。Cursor作為一款面向開發者的AI增強編輯器,提供了與本地大語言模型集成的功…

青少年CTF-貪吃蛇

題目描述: 進入賽題頁面: 按F12,查看源代碼, 可以看到是當分數大于或等于10000時,獲得flag,值已經給出,直接引用就可以,check_score.php?score${score},這里將${score}換…

亞馬遜測評老砍單?了解過全新自養號系統嗎?

以全球電商巨頭亞馬遜為例,其風控技術的進化堪稱一部永不停歇的“升級史”。然而,令人遺憾的是,不少賣家和測評服務商卻依舊沉浸在過去的“舒適區”,過度依賴指紋瀏覽器、luminati等傳統技術手段。這些曾經行之有效的工具&#xf…

module.noParse(跳過指定文件的依賴解析)

1. 說明 module.noParse 是 Webpack 的一個配置項,用于跳過對指定模塊的解析。通過忽略某些文件的依賴分析,可以提升構建速度,尤其適用于處理大型、獨立的第三方庫 2. 使用配置 webpakc.config.js const path require(path); module.exp…

什么是爬蟲?——從技術原理到現實應用的全面解析 V

什么是爬蟲?——從技術原理到現實應用的全面解析 V 二十一、云原生爬蟲架構設計 21.1 無服務器爬蟲(AWS Lambda) # lambda_function.py import boto3 import requests from bs4 import BeautifulSoups3 = boto3.client(s3)def lambda_handler(event, context):# 抓取目標…

Web滲透之系統入侵與提權維權

滲透測試步驟 信息收集 搜集一些IP地址以及對應的端口開放情況,看看是否有80、3306、22等等端口開放,以及操作系統和版本號,同時也要掃描可能存在的漏洞 漏洞利用 建立據點 漏洞利用成功后,通常會在目標機上獲得一個webshell&…

【數論分塊】數論分塊算法模板及真題

1.數論分塊的含義 數論分塊算法,就是枚舉出使得取整函數發生變化的地方。 例如,對表達式 ? n i ? \lfloor \frac{n}{i} \rfloor ?in??使用數論分塊算法,就可以在 O ( n ) O(\sqrt n) O(n ?)的時間復雜度下枚舉所有滿足 ? n i ? 1 ?…

SpringBoot 常用注解通俗解釋

SpringBoot 常用注解通俗解釋 一、啟動類相關 1. SpringBootApplication ? 作用:這是SpringBoot項目的"總開關",放在主類上 ? 通俗理解:相當于對電腦說:"開機!我要用SpringBoot了!…

棧應用:括號匹配

1&#xff1a;普通字符串括號匹配 #include <iostream> #include <stack> #include <string> using namespace std; bool mat(char,char); int if_match(string); int main(){string a;cin>>a;cout<<if_match(a)<<endl;return 0; } bool m…

某東h5st_5.1(補環境)

JS逆向實戰——某東h5st_5.1&#xff08;補環境&#xff09; 聲明網站流程分析結果展示總結 聲明 本文章中所有內容僅供學習交流&#xff0c;抓包內容、敏感網址、數據接口均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無…

新增Webhook通知功能,文檔目錄樹展示性能優化,zyplayer-doc 2.5.1 發布啦!

zyplayer-doc是一款適合企業和個人使用的WIKI知識庫管理工具&#xff0c;支持在線編輯富文本、Markdown、表格、Office文檔、API接口、思維導圖、Drawio以及任意的文本文件&#xff0c;支持基于知識庫的AI問答&#xff0c;專為私有化部署而設計&#xff0c;最大程度上保證企業或…

macOS安全隱私最佳實踐分析

1. 引言 隨著數字世界的不斷擴展&#xff0c;個人和組織面臨的安全與隱私威脅也日益增加。作為專業的安全合規與隱私保護研究團隊&#xff0c;Kaamel 對 macOS 系統的安全隱私現狀進行了全面分析&#xff0c;并提出了一系列最佳實踐建議&#xff0c;旨在幫助用戶更好地保護自己…

架構設計之異地多活與單元化(Set化)

公司的業務到達一定規模后,往往會考慮做多數據中心。一方面是面臨業務增長帶來的挑戰,單個數據中心變得難以支撐;另一方面出于對業務容災的考量,也可能在多個城市建立數據中心達到容災目的。單元化(Set化)是作為異地多活的一個解決方案。 一、什么是異地多活 異地多活是…

Kettle學習

一、Kettle 簡介 Kettle(現稱為 Pentaho Data Integration)是一款開源ETL工具,支持從多種數據源抽取、轉換和加載數據,廣泛應用于數據倉庫構建、數據遷移和清洗。其核心優勢包括: 可視化操作:通過拖拽組件設計數據處理流程(轉換和作業)。多數據源支持:數據庫(MySQL/…

蘋果計劃2026年底前實現美版iPhone“印度造”,以減輕關稅及地緣政治風險

基于 6 個來源 據多家媒體報道&#xff0c;蘋果公司計劃在2026年底前&#xff0c;實現在印度組裝銷往美國的大部分或全部iPhone手機&#xff0c;以減輕關稅和地緣政治緊張局勢帶來的風險。這一目標意味著蘋果需將印度的iPhone產量增加一倍以上&#xff0c;凸顯其供應鏈多元化戰…

【C++】googletest_TEST/TEST_F

在 Google Test 框架中&#xff0c;TEST 和 TEST_F 是定義測試用例的兩個核心宏&#xff0c;它們的區別主要體現在 測試上下文的管理方式 上。以下是二者的詳細對比&#xff1a; 1. TEST 宏 定義方式 TEST(TestSuiteName, TestName) {// 測試邏輯 }特點 獨立上下文&#xff…

14-DevOps-快速部署Kubernetes

在學習階段&#xff0c;為了能快速部署Kubernetes&#xff0c;這里用一個快速安裝工具&#xff1a;Kubeode&#xff0c;來完成Kubernetes的部署。 接下來部署一個單機&#xff0c;一主一從的Kubernetes。一主一從都部署在同一臺服務器上。 在虛擬機新開一個服務器&#xff0c…

Java 異常處理全解析:從基礎到自定義異常的實戰指南

Java 異常處理全解析&#xff1a;從基礎到自定義異常的實戰指南 一、Java 異常體系&#xff1a;Error 與 Exception 的本質區別 1. 異常體系核心架構 Java把異常當作對象來處理&#xff0c;并定義一個基類java.lang.Throwable作為所有異常的超類。 在Java API中已經定義了許…

redis 數據類型新手練習系列——string類型

redis 數據類型 Redis 主要支持以下幾種數據類型&#xff1a; &#xff08;1&#xff09;string&#xff08;字符串&#xff09;: 基本的數據存儲單元&#xff0c;可以存儲字符串、整數或者浮點數。 &#xff08;2&#xff09;hash&#xff08;哈希&#xff09;:一個鍵值對集…