HTTP अनुरोधों का उपयोग करके मेजबानों के एक बड़े समूह को प्रबंधित करें

मान लें कि हमारे पास 100-150 ग्राहक मशीनें हैं (उदाहरण के लिए, सूचना टर्मिनल) और हमें समय-समय पर उन्हें (अपडेट, सफाई, रिबूट, आदि) निष्पादित करने के लिए कमांड भेजने की आवश्यकता है, हम l2tp सुरंगों का उपयोग कर सकते हैं, हम ssh का उपयोग कर सकते हैं, लेकिन हम करेंगे आसान! हम अपने सर्वर से नियमित रूप से प्राप्त अनुरोधों का उपयोग करेंगे।


इस लेख में हम कार्यान्वयन के सबसे सरल उदाहरण पर विचार करेंगे, लेकिन यह आसानी से पूरा हो गया है और व्यक्तिगत आवश्यकताओं के लिए रीमेक है।


और इसलिए, सर्वर पर हमें Apache + php + MySQL की आवश्यकता है। ग्राहकों पर, हमारे पास पर्याप्त बश'आ और wget'a है।

मैं ग्राहक पक्ष के विवरण के साथ शुरू करूँगा।
प्रत्येक ग्राहक की अपनी विशिष्ट आईडी होगी, इसके लिए डेटाबेस के साथ संवाद करने की आवश्यकता होगी। आईडी या तो प्रत्येक क्लाइंट के लिए वैधानिक रूप से पंजीकृत हो सकती है, या सिस्टम पैरामीटर से उत्पन्न हो सकती है जैसे कि प्रोसेसर या मैक के सीरियल नंबर, या हार्ड ड्राइव के सीरियल नंबर और जैसे, ठीक है, या आप एक बार में सब कुछ से md5 राशि ले सकते हैं। यहां एक कार्यान्वयन विकल्प है।

#!/bin/bash
scpu=`lshw -C cpu|grep serial|awk '{print $2}'`
macu=`ifconfig eth0|grep HWaddr|awk '{print $5}'`
mbs=`lshw|grep "configuration: uuid"|awk '{print $2}'`
echo $scpu $macu $mbs>/tmp/idu.key
md5sum /tmp/idu.key|awk '{print $1}'

और यहां उत्तर से कमांड संग्रह स्क्रिप्ट है, इसे cron'om द्वारा हमारे द्वारा आवश्यक अंतराल पर लॉन्च किया जाएगा। उदाहरण के लिए, एक बार एक मिनट।

#!/bin/bash
idu=`/scripts/idu.sh
wget --no-check-certificate -q -O /tmp/task.md 192.168.3.92/id_task.php$
echo "TASK `cat /tmp/task.md`"
task=`cat /tmp/task.md`
task1="11"
if [[ "$task1" < "$task" ]]
then
touch /opt/apps/tasks/`echo $task`
fi

इसका अर्थ यह है कि यह डेटाबेस को एक अनुरोध देता है, और यह आपूर्ति किए गए कार्य के मूल्य को पारित करता है, जिसके बाद स्क्रिप्ट उसी नाम की फ़ाइल बनाता है, जिसे बाद में निम्नलिखित स्क्रिप्ट द्वारा संसाधित किया जाएगा। इस प्रणाली को डिज़ाइन किया गया है ताकि क्वेरी और निष्पादन स्क्रिप्ट स्वतंत्र रूप से काम कर सके। हमारे मामले में, यह इसलिए किया गया ताकि कार्यों को न केवल सर्वर द्वारा, बल्कि टर्मिनल GUI और कुछ अन्य सिस्टम स्क्रिप्ट द्वारा भी सेट किया जा सके।
दरअसल, प्रोसेसिंग कार्य की स्क्रिप्ट का एक उदाहरण।

#!/bin/bash
taskfile="/opt/apps/tasks/open_l2tp.tsk"
if [ -f $taskfile ]
then
echo "Open L2PT"
rm $taskfile
/etc/init.d/xl2tpd start
fi
#

जैसा कि आप देख सकते हैं, सब कुछ बहुत सरलता से लागू किया गया है।

अब बात करते हैं सर्वर साइड की।
सबसे पहले, हमारे पास ग्राहकों के बारे में जानकारी के साथ एक तालिका है, यह इस तरह से कुछ देखने के लिए उठता है।

NAME OP ID
term1 ( 41) 7d6f4f92f10a9b3bb3
term2 ( 32) 2b0fa075e3ca1b4ee9

हमारे उदाहरण में, यह तालिका हमारे लिए उपयोगी नहीं है, लेकिन व्यवहार में यह बहुत उपयोगी है। पहला कॉलम क्लाइंट मशीन (होस्टनाम) का नाम है, दूसरा विवरण है, तीसरा इसकी आईडी है, जिसके द्वारा सर्वर इसे पहचानता है।
दूसरे, वह आधार जिसमें हम ग्राहकों के लिए कार्य निर्धारित करेंगे। ऐसा दिखता है।

ID TASK STAT
2b0fa075e3ca1b4ee9 open_l2tp.tsk is_done
7d6f4f92f10a9b3bb3 open_l2tp.tsk wait

इसमें, हमारे पास 3 कॉलम भी होंगे। पहला आईडी है, दूसरा डिलीवर किया गया कार्य है, तीसरा निष्पादन की स्थिति है।
हम स्थिति "प्रतीक्षा" के साथ तालिका में एक प्रविष्टि जोड़ते हैं, ग्राहक कार्य को चुनता है और स्थिति को "किया जाता है" में बदल देता है। उसके बाद, रिकॉर्ड को भेजा या हटाया जा सकता है, या बस इस तालिका में छोड़ दिया जा सकता है। और हम एक साधारण php स्क्रिप्ट के साथ इस डेटाबेस के लिए अनुरोधों को संसाधित करेंगे।

<?
$ID = $_GET['ID'];
$dbcnx=@mysql_connect(localhost,base,*********);
mysql_select_db(TERM, $dbcnx);
$ath=mysql_query("select * from term_task where ID='$ID' and STATUS='wait';");
$term=mysql_fetch_array($ath);
$TASK=$term['TASK'];
$ath=mysql_query("UPDATE term_task SET STATUS='is done', DATA_S='$DATE' WHERE ID='$ID' and STATUS='wait';");
echo $TASK;
?>

यदि जानकारी महत्वपूर्ण और गुप्त प्रसारित की जाती है, तो आप https का उपयोग कर सकते हैं, और यदि जानकारी पूरी तरह से गुप्त है, तो प्रेषित डेटा को एईएस -256 और इसी तरह से एन्क्रिप्ट किया जा सकता है। उदाहरण के लिए, mcrypt का उपयोग करना।

खैर, बस इतना ही। मुझे उम्मीद है कि कोई काम आएगा।

Source: https://habr.com/ru/post/In132726/


All Articles