Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

Иногда Π½ΡƒΠΆΠ½ΠΎ быстро ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ для Π½ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса, Π° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ инфраструктуры/экспСртизы ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Π½Π΅Ρ‚. Π’ этом Π³Π°ΠΉΠ΄Π΅ ΠΌΡ‹ Π·Π° полчаса Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ инструмСнт для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π»ΡŽΠ±Ρ‹Ρ… Π²Π΅Π±-сСрвисов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ встроСнныС срСдства ubuntu: bash, cron ΠΈ curl. Для доставки ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ telegram.

Β«Π’ΠΈΡˆΠ΅Π½ΠΊΠΎΠΉ Π½Π° Ρ‚ΠΎΡ€Ρ‚Π΅Β» Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° Π»ΡŽΠ΄ΡΡ… β€” Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Когда ΠΌΡ‹ Π² тСлСмСдицинском сСрвисС Π”ΠΎΠΊΡ‚ΠΎΡ€ Рядом создали Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Π° для опрСдСлСния уровня стрСсса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π°ΠΌ понадобился ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³. Π—Π° ΠΏΠ°Ρ€Ρƒ часов Π±Ρ‹Π» сдСлан ΠΌΠΈΠ½ΠΈ-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΈ добавляСт ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π° своими сообщСниями.

Для Π½Π°Ρ‡Π°Π»Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ со скриптами:

git clone https://github.com/rshekhovtsov/msms.git

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ msms ΠΈ Π΄Π°Π»Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² Π½Π΅ΠΉ.

Если telegram Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ прокси. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” torsocks:

sudo apt install tor
sudo apt install torsocks

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° настроим Π² Ρ‚Ρ€ΠΈ шага ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ стартовой страницы google.com

ШАГ 1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π±ΠΎΡ‚Π° Π² telegram ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

  • Π’ строкС поиска ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π² telegram ΠΈΡ‰Π΅ΠΌ @botfather:

    Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

  • ЗапускаСм Π΅Π³ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Start, Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ /newbot ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅ΠΌ Π½Π° вопросы. НуТно ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ name β€” это имя Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Π° username β€” ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π½Π° Β«botΒ»:

    Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

    Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Π±ΠΎΡ‚ выдаст сСкрСтный Ρ‚ΠΎΠΊΠ΅Π½ для HTTP API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» telegram-api-key.txt Π² ΠΏΠ°ΠΏΠΊΠ΅ msms.

  • НабираСм Π² строкС поиска telegram имя нашСго Π±ΠΎΡ‚Π°, ΠΈ запускаСм Π΅Π³ΠΎ.
  • Π’ качСствС Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΡˆΡ‚Ρ€ΠΈΡ…Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ сСбя Π² список ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список послСдних ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π±ΠΎΡ‚Ρƒ, Ρ‚Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½Π° строка с нашими id ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² telegram. Π‘Π΅Ρ€Ρ‘ΠΌ этот id ΠΈ сохраняСм Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ services/google-recipients.txt. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°: каТдая строка β€” ΠΎΠ΄ΠΈΠ½ id. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

    123456789
    987654321

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ получатСля, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΡ‚Π° Π² telegram, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ recipients-setup.sh ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ id Π² Ρ„Π°ΠΉΠ».

ШАГ 2. НастраиваСм ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

ОписаниС сСрвиса происходит ΠΏΡƒΡ‚Ρ‘ΠΌ создания ini-Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΏΠΊΠ΅ serviсes. НуТно Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  1. MSMS_SERVICE_NAME: Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ сСрвиса β€” Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² оповСщСниях ΠΈ ΠΆΡƒΡ€Π½Π°Π»Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.
  2. MSMS_SERVICE_ENDPOINT: endpoint сСрвиса, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ curl’ΠΎΠΌ.
  3. MSMS_CURL_PARAMS: Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ curl, см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅.
  4. MSMS_EXPECTED: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ сСрвиса. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ссли ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ.
  5. MSMS_EXPECTED_FILE: имя Ρ„Π°ΠΉΠ»Π° с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ сСрвиса. Если ΡƒΠΊΠ°Π·Π°Π½, пСрСзаписываСт MSMS_EXPECTED.
  6. MSMS_RECIPIENTS: Ρ„Π°ΠΉΠ» со списком ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ.

Запрос Π½Π° google.com Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ фиксированный html c Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΠΌ, Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра:

curl google.com > services/google-response.html

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» services/google.ini:

MSMS_SERVICE_NAME='google front page'

# service endpoint
MSMS_SERVICE_ENDPOINT='google.com'

# curl parameters
MSMS_CURL_PARAMS='-s --connect-timeout 3 -m 7'

# expected service response
MSMS_EXPECTED_FILE='google-response.html'

# recipients list file
MSMS_RECIPIENTS='google-recipients.txt'

Π’ MSMS_CURL_PARAMS ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ curl, Π² Ρ‚ΠΎΠΌ числС:

  1. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сообщСния curl, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ консоль ΠΈ Π»ΠΎΠ³: -s
  2. Π—Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ соСдинСния с провСряСмым сСрвисом (Π² сСкундах): --connect-timeout 3
  3. Π—Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ получСния ΠΎΡ‚Π²Π΅Ρ‚Π°: -m 7
  4. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сСртификата для SSL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ самоподписанный сСртификат): --insecure
  5. Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ http-запроса: -X POST
  6. Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ: -H "Content-Type: application/json"
  7. Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ запроса Π² Π²ΠΈΠ΄Π΅ строки ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Ρ„Π°ΠΉΠ»Π°: -d @request.json

ΠœΡ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ оповСщСния ΠΈ Π·Π°Π΄Π°Π»ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹ 3 сСк. Π½Π° соСдинСниС ΠΈ 7 сСк. Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвиса.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. К соТалСнию, bash Π² этом смыслС довольно Ρ…Ρ€ΡƒΠΏΠΎΠΊ, ΠΈ случайно Π·Π°Π»Π΅Ρ‚Π΅Π²ΡˆΠ°Ρ Π±Π°Π±ΠΎΡ‡ΠΊΠ° Π½Π΅ Ρ‚Π°ΠΌ поставлСнная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π³ΠΈΠ±Π΅Π»ΠΈ всСлСнной слоТно диагностируСмым ошибкам.

ΠœΡ‹ настроили ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС ОК:

sudo chmod +x ./monitoring.sh
torsocks ./monitoring.sh

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ вывСсти сообщСниС Π²ΠΈΠ΄Π°:

2020-01-10 12:14:31
health-check "google front page": OK

ШАГ 3. НастраиваСм расписаниС

Настроим расписаниС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π² cron:

sudo crontab -e

Π”ΠΎΠ±Π°Π²ΠΈΠΌ строку для Π΅ΠΆΠ΅ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ google.com:

*/1 * * * * torsocks <ПУВЬ К ΠŸΠΠŸΠšΠ• Π Π•ΠŸΠžΠ—Π˜Π’ΠžΠ Π˜Π―>/monitoring.sh >> <ПУВЬ К ΠŸΠΠŸΠšΠ• Π Π•ΠŸΠžΠ—Π˜Π’ΠžΠ Π˜Π―>/monitoring.log 2>&1

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Π² 11.00 ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ самого ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. Для этого ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π² скрипт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DAILY:

0 11 * * * torsocks <ПУВЬ К ΠŸΠΠŸΠšΠ• Π Π•ΠŸΠžΠ—Π˜Π’ΠžΠ Π˜Π―>/monitoring.sh DAILY >> <ПУВЬ К ΠŸΠΠŸΠšΠ• Π Π•ΠŸΠžΠ—Π˜Π’ΠžΠ Π˜Π―>/monitoring.log 2>&1

2>&1 β€” стандартный ΠΏΡ€ΠΈΠ΅ΠΌ, ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ошибки Π² основной ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² ΠΆΡƒΡ€Π½Π°Π» ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ измСнСния ΠΈ ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚ΠΈΠΌ ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

 sudo service cron reload

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ настройкС cron ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, здСсь.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ скрипт ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· curl ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° google.com. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ отличаСтся ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ, скрипт Ρ€Π°Π·ΠΎΡˆΠ»Ρ‘Ρ‚ ΠΏΠΎ списку ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π² telegram. Π–ΡƒΡ€Π½Π°Π» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ вСдётся Π² Ρ„Π°ΠΉΠ»Π΅ monitoring.log

Если Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ сСрвис, ΠΌΡ‹ просто создаСм Π½ΠΎΠ²Ρ‹ΠΉ ini-Ρ„Π°ΠΉΠ» для Π½Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ services ΠΈ, ΠΏΡ€ΠΈ нСобходимости, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ список ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ. Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ автоматичСски.

Если провСряСмый сСрвис стал нСдоступСн, ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅ΠΆΠ΅ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎ. Если Π½Π΅ получаСтся быстро Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСрвис, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ увСдомлСния Π² свойствах Π±ΠΎΡ‚Π° Π² telegram.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ скриптов.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ сообщСний ΠΈ ΡΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с Π±ΠΎΡ‚ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΆΠΈΠ²Ρ‹ΠΌ, ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π³ΠΎ ΠœΠ°Π½Π΅Ρ‡ΠΊΠΎΠΉ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ-Π°Π²Π°Ρ‚Π°Ρ€ ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»ΠΈ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΈΠ°Ρ€Ρ‰ΠΈΠΊΠΎΠ² для создания тСкстов сообщСний. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наши Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° свой вкус.

НапримСр Ρ‚Π°ΠΊ:

Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron
ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊ:

Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron
ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ ΠΈ Π½Π΅Ρ‚?

Имя Π±ΠΎΡ‚Π° ΠΈ Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠ° Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· @botfather.
Π¨Π°Π±Π»ΠΎΠ½Ρ‹ сообщСний находятся Π² ΠΏΠ°ΠΏΠΊΠ΅ templates:

  • curl-fail.txt: сообщСниС, отправляСмоС Π² случаС, ΠΊΠΎΠ³Π΄Π° curl Π²Π΅Ρ€Π½ΡƒΠ» Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ ошибки. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ нСвозмоТности Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ сСрвиса.
  • daily.txt: Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ сообщСниС, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ сСрвиса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  • service-fail.txt: сообщСниС, отправляСмоС Π² случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚Π²Π΅Ρ‚ сСрвиса отличаСтся ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ.

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ возмоТности кастомизации Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ встроСнных шаблонов сообщСний.
Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ эмодзи. К соТалСнию, habr ΠΈΡ… Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚.
Для ΠΏΠΎΠ΄Π±ΠΎΡ€Π° эмодзи ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ поиск Π½Π° emojipedia.org:

Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠΉ символ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈ вставляСтС Π² тСкст шаблона (это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ unicode).

  1. curl-fail.txt:
    ΠšΠΎΡ‚Ρ‘Π½ΠΎΠΊ,  ΠΏΠΎΠΌΠΎΠ³ΠΈ ΠΌΠ½Π΅... 
    НС ΠΌΠΎΠ³Ρƒ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ сСрвиса "$MSMS_SERVICE_NAME" 
    `CURL EXIT CODE: $EXIT_CODE`

    ΠœΡ‹ использовали Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ имя сСрвиса (пСрСмСнная MSMS_SERVICE_NAME) ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ скрипта с ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ curl (EXIT_CODE). Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ сообщСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ telegram markdown: символы "`" ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‚ тСкст фиксированной ΡˆΠΈΡ€ΠΈΠ½Ρ‹. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ апострофы ΡΠ²Π»ΡΡŽΡ‚ΡΡ слуТСбными символами bash, ΠΌΡ‹ экранируСм ΠΈΡ… символом "". ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… прСдваряСм Π·Π½Π°ΠΊΠΎΠΌ "$".

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

    Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

  2. service-fail.txt:
    ΠšΠΎΡ‚Ρ‘Π½ΠΎΠΊ, ΠΏΠΎΠΌΠΎΠ³ΠΈ ΠΌΠ½Π΅... 
    БСрвис "$MSMS_SERVICE_NAME" мСня расстроил
    Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠ½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚:
    `$RESPONSE`

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

    Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

    Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ скрипта: RESPONSE. Она содСрТит ΠΎΡ‚Π²Π΅Ρ‚ сСрвиса.

  3. daily.txt:
    ΠœΠ°Π»Ρ‹Ρˆ, ΠΏΡ€ΠΈΠ²Π΅Ρ‚!
    Π£ мСня всё Ρ…ΠΎΡ€ΠΎΡˆΠΎ, cΠ»Π΅ΠΆΡƒ Π·Π° сСрвисом:
    "$MSMS_SERVICE_NAME" ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚ΠΊΡƒ...
    А ΠΊΠ°ΠΊ Ρƒ тСбя Π΄Π΅Π»Π°?
    

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

    Π‘ΠΎΡ‚ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π΅Π±-сСрвисов Π·Π° полчаса: telegram + bash + cron

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ скриптов.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°

monitoring.sh Π΄Π΅Π»Π°Π΅Ρ‚ простой auto-discovery β€” Π±Π΅Ρ€Π΅Ρ‚ всС ini-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ services ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ выполняСт основной скрипт с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ рассылки ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ:

#!/bin/bash
cd $(dirname "$0")/services

for service_ini  in $(ls *.ini); do
    bash ../msms.sh "$1" "$service_ini"
done

Для формирования СТСсуточного сообщСния ΠΎ статусС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° скрипту ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DAILY.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ стартС скрипта тСкущая ΠΏΠ°ΠΏΠΊΠ° мСняСтся Π½Π° services. Π­Ρ‚ΠΎ позволяСт Π² ini-Ρ„Π°ΠΉΠ»Π°Ρ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ services.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ рассылки ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ

msms.sh содСрТит ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сСрвиса ΠΈ рассылки ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ.

Π Π°Π±ΠΎΡ‚Π° с telegram:

# telegram endpoint
TG_API_URL="https://api.telegram.org/bot$(cat ../telegram-api-key.txt)/sendMessage"

#################################################################
# send message to telegram
# parameter: message text
#################################################################
function send_message {
    for chat_id  in $(cat ../$MSMS_RECIPIENTS); do
	curl -s -X POST --connect-timeout 10 $TG_API_URL -d chat_id=$chat_id -d parse_mode="Markdown" -d text="$1"
	echo
    done
}

ΠœΡ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ URL для доступа ΠΊ REST API telegram, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сохранСнный Π² Ρ„Π°ΠΉΠ»Π΅ сСкрСтный ΠΊΠ»ΡŽΡ‡.

Ѐункция send_message ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ curl для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний Π½Π° этот REST API, забирая id ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ Π² ini. Π’ отправляСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ сообщСний: parse_mode="Markdown".

Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Ρ‚Ρƒ-врСмя ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ini-Ρ„Π°ΠΉΠ».

echo $(date '+%Y-%m-%d %H:%M:%S')

# load variables from .ini file:
. $2

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠ°Ρ строка . $2 выполняСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° Π²Ρ…ΠΎΠ΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ini-Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ скрипт, занося Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Ρ‘ΠΌ значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Ссли Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ MSMS_EXPECTED_FILE:

if [ -n "$MSMS_EXPECTED_FILE" ]; then
 MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сСрвиса с ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ, Ссли Π½ΡƒΠΆΠ½ΠΎ:

RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: CURL EXIT WITH $EXIT_CODE
    MESSAGE="$(cat ../templates/curl-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: "$RESPONSE"
    MESSAGE="$(cat ../templates/service-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
else
    echo health-check "$MSMS_SERVICE_NAME": OK
fi

Π‘Π½Π°Ρ‡Π°Π»Π° присваиваСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ RESPONSE Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ curl для Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвиса.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ EXIT_CODE=$? ΠΊΠ»Π°Π΄Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния послСднСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚.Π΅. curl. ΠŸΡ€ΠΈ нСобходимости ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ оповСщСния, считываСтся шаблон ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ осущСствляСтся рассылка Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ send_message.

ПослСдний Π±Π»ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DAILY:

if test "$1" = "DAILY"; then
    echo health-check "$MSMS_SERVICE_NAME" DAILY
    MESSAGE="$(cat ../templates/daily.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
fi

Он отправляСтся сообщСниС, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ самого ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

recipients-setup.sh обращаСтся ΠΊ API telegram для получСния послСдних сообщСний, адрСсованных Π±ΠΎΡ‚Ρƒ:

curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates 
| python recipients-setup.py

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ магия python для красивого Π²Ρ‹Π²ΠΎΠ΄Π° списка. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ просто Π²Π·ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ id ΠΈΠ· json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ скрипты ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ сообщСний, настраивая лишь Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ сСрвисы ΠΈ списки для ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ; ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Β«Π»ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΒ» для Π±ΠΎΡ‚Π°; Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ своё Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° основС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ.

Π’ качСствС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² дальнСйшСго развития Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ Π² самом Π±ΠΎΡ‚Π΅, Π½ΠΎ Ρ‚ΡƒΡ‚ Π±Π΅Π· python ΡƒΠΆΠ΅ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Если Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠΉΠ΄ΡƒΡ‚ Ρ€ΡƒΠΊΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ мСня β€” Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΡƒΠ΄Π° Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ pull request πŸ™‚

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com