Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

Mararka qaarkood waxaad u baahan tahay inaad si degdeg ah u samayso la socodka adeeg cusub, laakiin ma jiro kaabayaal/Khibrad diyaarsan oo gacanta ku jirta. Hagahan, nus saac gudaheed waxaan hirgalin doonaa qalab lagula soconayo adeeg kasta oo webka ah, anagoo adeegsanayna kaliya aaladaha lagu dhisay ubuntu: bash, cron iyo curl. Waxaan isticmaali doonaa telegram si aan u gaarsiino digniinaha.

"Cherry on the cake" waxay noqon doontaa ka-qaybgalka shucuureed ee isticmaalayaasha. Lagu tijaabiyay dadka - way shaqeysaa.

Markii aan joognay adeegga telemedicine-ka Dhakhtarka dhow ayaa abuuray chatbot si loo go'aamiyo heerka walaaca isticmaalayaasha, waxaan u baahneyn la socodka. Laba saacadood gudahood, mashruuc-yar ayaa la sameeyay kaas oo aan si fiican u shaqayn oo kaliya, laakiin sidoo kale ku daraya wanaag farriimaha.

Marka hore, aan helno meel kayd ah oo qoraallo leh:

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

Tag faylka msms ka dibna ka shaqee.

Haddii telegramku xannibmo, isticmaal wakiil. Doorashada ugu fudud uguna kalsoonida badan waa torsocks:

sudo apt install tor
sudo apt install torsocks

Tusaale ahaan, aynu u samayno la socodka bogga bilowga google.com saddex tallaabo.

TALLAABADA 1. Ku samee bot telegram oo hel aqoonsiga isticmaalaha

  • Barta dadka lagala xidhiidho ee telegram-ka ayaan ka raadinaa @botaabkii:

    Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

  • Waxaan ku bilownay badhanka Start, geli taliska /newbot oo ka jawaab su'aalaha. Waxaad u baahan tahay inaad maskaxda ku hayso in magacu yahay magaca bot-ka loo soo bandhigi doono isticmaalayaasha, iyo magaca isticmaaluhu waa mid gaar ah waana inuu ku dhammaadaa "bot":

    Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

    Waxyaabaha kale, bot-ku wuxuu soo saari doonaa calaamad sir ah HTTP API, kaas oo ay tahay in la koobiyeeyo oo lagu kaydiyo faylka telegram-api-key.txt ee ku jira galka msms.

  • Waxaan ku qornaa magaca bot-ka barta raadinta telegramka oo aan bilowno.
  • Dhammaystir ahaan, aynu nafteena ku darno liiska la socodka qaatayaasha digniinta:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Qoraalku wuxuu soo bandhigi doonaa liiska wicitaankii ugu dambeeyay ee bot; waa inuu jiraa hal sadar oo leh aqoonsigayaga iyo magaca telegram. Waxaan qaadnaa aqoonsigan oo ku kaydinay adeegyada faylka/google-recipients.txt. Qaabka faylka: sadar kasta waa hal id. Tusaale:

    123456789
    987654321

Si aad ugu darto qaataha cusub, waxaad u baahan tahay inaad ka codsato inuu ku bilaabo bot-ka telegram-ka, maamul recipients-setup.sh oo ku daro aqoonsiga faylka.

TALLAABADA 2. Deji la socodka

Adeegga waxaa lagu sifeeyaa iyadoo la abuurayo fayl ini galka adeegyada. Waxaad u baahan tahay inaad dejiso shan cabbir:

  1. MSMS_SERVICE_NAMEMagaca adeegga - waxa loo isticmaali doonaa digniinaha iyo diiwaanka la socodka.
  2. MSMS_SERVICE_ENDPOINT: dhamaadka adeega aan la xiriiri doono curl.
  3. MSMS_CURL_PARAMS: xulashooyinka curl oo dheeri ah, eeg tusaalaha hoose.
  4. MSMS_EXPECTEDJawaabta laga filayo adeegga. La isticmaalo haddii ay jawaabtu gaaban tahay.
  5. MSMS_EXPECTED_FILEMagaca faylka oo leh jawaabta adeegga ee la filayo. Haddii la cayimo, dib buu u qoraa MSMS_EXPECTED.
  6. MSMS_RECIPIENTS: ku fayl gareeya liiska wargelinta qaataha.

Codsiga google.com wuxuu ku soo celiyaa html go'an oo dib u jiheyn ah, waxaan u isticmaali doonaa sida jawaabta server-ka ee la filayo:

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

Aan abuurno adeegyada/faylka 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 waxaad dejin kartaa wax kasta oo curlku samayn karo, oo ay ku jiraan:

  1. Dami fariimaha curlka si aad uga fogaato qaska console-ka oo gal: -s
  2. Deji wakhtiga xidhidhiyaha ee adeega la hubinayo (ilbiriqsi gudahood): --connect-timeout 3
  3. Deji waqtiga jawaabta: -m 7
  4. Dami xaqiijinta shahaadada SSL (tusaale ahaan, haddii aad isticmaalayso shahaado is-saxiixeed): --insecure
  5. Sheeg nooca codsiga http: -X POST
  6. Sheeg cinwaanada: -H "Content-Type: application/json"
  7. U sheeg hay'adda codsiga sidii xadhig ama fayl. Tusaale faylka: -d @request.json

Waanu joojinay ogaysiisyada waxaanan dejinay wakhtigoodu ilaa 3 sekan isku xidhka iyo 7 sekan si aad u hesho jawaab adeeg.

Digniin: Ku qeex qiyamka halbeegyada hal xigasho, sida tusaale ahaan. Nasiib darro, bash dareenkan aad ayuu u jilicsan yahay, balastar-kii shil ahaan oo leh calaamad oraaheed khaldan waxay u horseedi kartaa dhimashada caalamka oo ay adagtahay in la ogaado khaladaadka.

Waxaan samaynay la socodka. Aan hubino in wax walba ay sax yihiin:

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

Qoraalku waa inuu muujiyaa fariin sida:

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

TALLAABADA 3. Dejinta jadwal

Aynu dejinno jadwal la-socod sida cron:

sudo crontab -e

Aan ku darno layn si aan u hubiyo google.com daqiiqad kasta:

*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

Waxaan ku dari doonaa digniin maalin kasta 11.00:XNUMX subaxnimo, taasoo xaqiijinaysa shaqeynta la socodka lafteeda. Si tan loo sameeyo, waxaan u gudbin doonaa halbeegga MAALINAHA qoraalka:

0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

2>&1 - Farsamo caadi ah oo khaladaadka u jiheeya qulqulka wax soo saarka ee ugu muhiimsan. Natiijo ahaan, waxay sidoo kale ku dambayn doonaan diiwaanka la socodka.

Aynu kaydinno isbeddellada oo aan ku soo qaadanno amarka:

 sudo service cron reload

Waxaad ka akhrisan kartaa wax badan oo ku saabsan dejinta cron, tusaale ahaan, halkan.

Markaa, daqiiqad kasta waxaa la bilaabayaa qoraal la socodka, kaas oo kala xidhiidhi doona google.com iyada oo loo marayo curl. Haddii jawaabta la helay ay ka duwan tahay tii la filayo, qoraalku wuxuu soo diri doonaa ogeysiis telegram liiska dadka qaata. Diiwaanka hantidhawrka waxa lagu hayaa faylka monitoring.log

Haddii aan u baahanahay inaan ku darno adeeg kale, waxaan si fudud ugu abuureynaa faylal ini cusub galka adeegyada iyo, haddii loo baahdo, samee liis gaar ah oo qaatayaasha. Wax kasta oo kale ayaa si toos ah u shaqayn doona.

Haddii adeegga la hubiyay uu noqday mid aan la heli karin, digniin ayaa la soo diri doonaa daqiiqad kasta. Haddii aadan si dhakhso ah u soo celin karin adeegga, waxaad si ku meel gaar ah u joojin kartaa ogeysiisyada ku jira guryaha telegramka bot.

Haddaba aan si dhow u eegno sifooyinka dheeraadka ah iyo hirgelinta qoraallada.

Qaababka Farriinta iyo Ka-qaybgalka Dareenka

Si aan ula xiriirno bot-ka mid firfircoon, waxaan ugu magac darnay Manechka, waxaan ku darnay muuqaal avatar ah oo ku habboon oo aan shaqaaleysiinay khabiiro PR xirfad leh si ay u abuuraan fariimaha qoraalka ah. Waxaad isticmaali kartaa khibradeena ama waxaad u bedeli kartaa dhadhankaaga.

Tusaale ahaan sidan:

Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron
ama xitaa sida tan:

Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron
Maxaa diidaya?

Magaca bot-ka iyo avatarka waxa lagu dejiyay iyada oo loo marayo @botaabkii.
Qaababka fariimaha ayaa ku jira galka habyaalada:

  • curl-fail.txt: fariinta la diro marka curlku soo celiyo kood qalad aan eber ahayn. Caadi ahaan waxay ka hadashaa suurtogalnimada in la gaaro adeegga.
  • maalin walba.txtFariin maalinle ah oo xaqiijinaysa in la socodka adeeggu shaqaynayo.
  • service-fail.txt: Fariinta la diro marka jawaabta adeeggu ay ka duwan tahay wixii la filayay.

Aynu eegno ikhtiyaarka habaynta anagoo adeegsanayna qaab-dhismeedka fariinta tusaale ahaan.
Qaababku waxay isticmaalaan emoji. Nasiib darro, habr iyaga ma soo bandhigaan.
Si aad u doorato emoji, way ku habboon tahay in la isticmaalo raadinta emojipedia.org:

Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

Waxaad si fudud u koobiyaysaa oo aad ku dhejinaysaa astaanta ku habboon qoraalka qaabka (tani waa unicode caadiga ah).

  1. curl-fail.txt:
    Котёнок,  помоги мне... 
    Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" 
    `CURL EXIT CODE: $EXIT_CODE`

    Waxaan isticmaalnay magaca adeegga aan cayimay (variable MSMS_SERVICE_NAMEiyo doorsoome far gudaha ah oo leh koodka bixista curl (EXIT_CODE). Waxaan sidoo kale qaabeynay fariinta anagoo adeegsanayna calaamadeyn calaamadaynta telegram: "`" xarfaha waxay ku wareegsan yihiin qoraalka ballac go'an. Maaddaama oraahyada iyo qoraalladu ay yihiin calaamado bash ah, waxaan uga baxsaneynaa "". Magacyo kala duwan waxaa ka horreeya calaamad "$".

    Natiijada:

    Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

  2. service-fail.txt:
    Котёнок, помоги мне... 
    Сервис "$MSMS_SERVICE_NAME" меня расстроил
    Он работает неправильно, вот что он мне отвечает:
    `$RESPONSE`

    Natiijada:

    Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

    Halkan waxaan ku isticmaalnaa doorsoome qoraal kale: RESPONSE. Waxay ka kooban tahay jawaabta adeegga.

  3. daily.txt:
    Малыш, привет!
    У меня всё хорошо, cлежу за сервисом:
    "$MSMS_SERVICE_NAME" каждую минутку...
    А как у тебя дела?
    

    Natiijada:

    Bot si loola socdo adeegyada shabakada nus saac gudahood: telegram + bash + cron

Aan u gudubno hirgelinta qoraallada.

Qoraalka kormeerka

la socodka.sh Wuxuu sameeyaa sahamin fudud oo otomaatig ah - wuxuu ka qaadaa dhammaan faylasha ini galka adeegyada mid walbana wuxuu fulinayaa qoraalka ugu weyn ee macquulka ah ee hubinta iyo dirista digniinaha:

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

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

Si aad u abuurto fariin maalinle ah oo ku saabsan heerka la socodka, waxaad u gudbin kartaa cabbirka MAALINAHA qoraalka.

Fadlan ogow in marka qoraalku bilaabmo, faylka hadda jira uu isku beddelo adeegyada. Tani waxay kuu ogolaaneysaa inaad qeexdo dariiqooyinka faylka ee ku saabsan adeegyada ku jira faylalka ini.

Qoraalka loogu talagalay hubinta iyo dirida ogeysiisyada

msms.sh waxa ku jira macquulka ugu wayn ee hubinta adeega iyo dirida digniinaha.

La shaqaynta 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
}

Waxaan soo saareynaa URL si aan u galno telegram REST API annagoo adeegsanayna furaha sirta ah ee lagu keydiyay faylka.

Shaqada send_message waxay isticmaashaa curl si ay fariimaha ugu dirto API-ga REST, iyada oo ka qaadanaysa aqoonsiga qaataha faylka aanu ku qeexnay ini. Xogta aanu dirno, waxaanu ku tusinaynaa in aanu isticmaalno calaamadaynta fariinta: parse_mode="Markdown".

Aan soo bandhigno taariikhda iyo waqtiga hadda oo aan soo rarno faylka ini.

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

# load variables from .ini file:
. $2

Xarig sixir . $2 Wuxuu fuliyaa faylalka ini ee loo gudbiyay gelinta sida cabbirka labaad oo ah qoraal caadi ah, isagoo geliya qiyamka ku qeexan doorsoomayaasha deegaanka.

Ka soo rar jawaabta la filayo faylka haddii cabbirka la cayimay MSMS_EXPECTED_FILE:

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

Waanu hubin doonaa adeega waxaanan soo diri doonaa digniinaha haddii loo baahdo:

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

Marka hore waxaanu ku wareejinaa doorsoomaha RESPONSE natiijada fulinta amarka curl ee adeegan.

Sifeynta EXIT_CODE=$? wuxuu dhigayaa natiijada amarka ugu dambeeya doorsoome, i.e. laablaaban Haddii ay lagama maarmaan noqoto in la soo diro digniin, qaabka waxaa laga akhriyaa faylka u dhigma waxaana loo diraa qaataha isticmaalaya send_message.

Balooggii ugu dambeeyay wuxuu socodsiiyaa cabbirka MAALINKA:

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

Waxay soo dirtaa fariin xaqiijinaysa shaqeynta la socodka lafteeda.

Helitaanka liiska aqoonsiga isticmaalaha

qaata-dejinta.sh wac telegram API si uu u helo farrimihii ugu dambeeyay ee lagu soo hagaajiyo bot:

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

Tani waxay isticmaashaa sixirka Python si ay u muujiso liiska si qurux badan. Tani maahan lagama maarmaan, waxaad si fudud uga qaadan kartaa id la doonayo json, kaas oo amarku soo saari doono:

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

gunaanad

Sidaa darteed, waxaad isticmaali kartaa qoraallo diyaarsan iyo qaabab fariimo, adoo dejinaya kaliya adeegyada la kormeero iyo liisaska digniinta; waxaad u abuuri kartaa "shakhsinimo" cusub bot; ama waxaad samayn kartaa go'aan adiga kuu gaar ah oo ku salaysan waxa la soo jeediyay.

Ikhtiyaarada horumarinta dheeraadka ah waxay soo jeedinayaan habaynta iyo maaraynta la socodka bot lafteeda, laakiin halkan ma samayn kartid Python la'aan. Haddii qof iga hor helo, waad garanaysaa meesha aad ka dhiibto codsiga jiidista :)

Source: www.habr.com

Add a comment