簡體   English   中英

檢查蚊子健康的腳本

[英]Script to check mosquitto is healthy

我正在嘗試為mosquitto創建一個運行狀況檢查腳本(由docker使用)。

if [ -z "$USERNAME" ]; then
 mosquitto_sub -t '$SYS/#' -C 1 | grep -v Error || exit 1
else 
 mosquitto_sub -t '$SYS/#' -C 1 -u $USERNAME -P $PASSWRD | grep -v Error || exit 1
fi

我遇到的問題是,如果給了錯誤的密碼,mosquitto_sub只會繼續輸出Connection Refused: not authorised. 一遍又一遍,docker中的超時內容顯示為flakey,所以它永遠不會結束。

看起來mosquitto並沒有提供更好的失敗方法。 我認為我可能需要將其作為可以殺死的后台進程執行,但是我的bash並不是那么好,所以有人有更好的主意嗎?

[編輯-根據BMitch的建議進行了更新]

我已將腳本修改為如下所示:

#!/bin/sh

if [ -z "$USERNAME" ]; then
        (sleep 10; kill $$) & exec mosquitto_sub -t '$SYS/#' -C 1 | grep -v Error || exit 1 "$@"
else
        (sleep 10; kill $$) & exec mosquitto_sub -t '$SYS/#' -u $USERNAME -P $PASSWORD -C 1 | grep -v Error || exit 1  "$@"
fi

但是運行它只會得到以下輸出:

Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Terminated
root@e30e9cadd8fc:/# Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.
Connection Refused: not authorised.

關於如何超時運行腳本,有一個bash常見問題解答 嘗試將mosquitto_sub替換為包含以下內容的mosquitto_sub_timeout.sh:

#!/bin/bash
(sleep 10; kill $$) & exec mosquitto_sub "$@"

然后,您的運行狀況檢查腳本將如下所示:

if [ -z "$USERNAME" ]; then
 mosquitto_sub_timeout.sh -t '$SYS/#' -C 1 | grep -v Error || exit 1
else 
 mosquitto_sub_timeout.sh -t '$SYS/#' -C 1 -u $USERNAME -P $PASSWRD | grep -v Error || exit 1
fi

正如bash FAQ中提到的那樣,最后一次更新,只要安裝在您的容器中,timeout命令可能是所有它們的最佳解決方案:

if [ -z "$USERNAME" ]; then
 timeout --foreground 10 mosquitto_sub -t '$SYS/#' -C 1 | grep -v Error || exit 1
else 
 timeout --foreground 10 mosquitto_sub -t '$SYS/#' -C 1 -u $USERNAME -P $PASSWRD | grep -v Error || exit 1
fi

BMitch的想法改變了)

我不得不超時參數從改變--foreground-t和逃避$通過將多了一個$符號前。

在我的docker-compose中,查找下一個( 請記住,用戶名和密碼已刪除,您仍然可以添加它們-只需再次轉義$符號 ): version: '3' services: mosquitto: image: 'eclipse-mosquitto:1.6.7' container_name: mosquitto hostname: mosquitto volumes: - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log - ./mosquitto/config:/mosquitto/config networks: - cluster restart: on-failure healthcheck: test: ["CMD-SHELL", "timeout -t 5 mosquitto_sub -t '$$SYS/#' -C 1 | grep -v Error || exit 1"] interval: 10s timeout: 10s retries: 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM