Àâòîìàòèçàöèÿ
Àâòîð: | Àðòåìüåâ Ñåðãåé Èãîðåâè÷ |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
Èíîãäà íà ñàéòå âîçíèêàåò íåîáõîäèìîñòü îðãàíèçîâàòü ïåðèîäè÷åñêîå âûïîëíåíèå êàêèõ-ëèáî çàäà÷. Ýòî ìîæåò áûòü ðàññûëêà ïî÷òû, ïðîâåðêà è ðåçåðâèðîâàíèå áàç äàííûõ, ÷èñòêà êåøåé, îáíîâëåíèå ñîäåðæèìîãî êàòàëîãîâ è ìíîãîå äðóãîå.
Àâòîìàòèçàöèè ìîæíî äîáèòüñÿ äâóìÿ ïóòÿìè - èñïîëüçóÿ ñðåäñòâà PHP èëè èñïîëüçóÿ âíåøíèå ïðèëîæåíèÿ-ïëàíèðîâùèêè.
Ïåðâûé ñïîñîá òðåáóåò õîðîøèõ çíàíèé ÿçûêà è ïðèíöèïîâ ðàáîòû ñåðâåðà. Ñìûñë ñïîñîáà â òîì, ÷òî ïïîñëå êàæäîé çàãðóçêè ñòðàíèöû ñêðûòíî äëÿ ïîëüçîâàòåëÿ çàïóñêàåòñÿ ñëóæåáíûé ñêðèïò, äåëàþùèé âñå íåîáõîäèìûå îïåðàöèè. Íàïðèìåð:
// index.php <?php // ãåíåðàöèÿ è âûâîä ñòðàíèöû ïîëüçîâàòåëþ // ... // ñòðàíèöà îòïðàâëåíà è ìîæíî // âûïîëíèòü ñåðâèñíûå ôóíêöèè // ïîäêëþ÷àåì íóæíûå ôàéëû include('service.php'); // çàïóñêàåì âûïîëíåíèå îïåðàöèé EmailSiteNews(); BackupMyDatabase(); UpdateSiteCounters(); ?>
Åäèíñòâåííîå ïðåèìóùåñòâî ýòîãî ìåòîäà - íå òðåáóåòñÿ íè÷åãî, êðîìå èíòåðïðåòàòîðà PHP, à âîò ñåðü¸çíûõ íåäîñòàòêîâ íåñêîëüêî:
1. Ñåðâèñíûå îïåðàöèè âûïîëíÿþòñÿ ïðè êàæäîé çàãðóçêå èëè îáíîâëåíèè ñòðàíèöû, ñëåäîâàòåëüíî ïðè áîëüøîì êîëè÷åñòâå ïîñåòèòåëåé ñåðâåð áóäåò ñèëüíî ïåðåãðóæåí.
2. Ñåðâèñíûé ñêðèïò äîëæåí êîíòðîëèðîâàòü âðåìÿ ñâîåãî âûïîëíåíèÿ è ñâîåâðåìåííî ñîõðàíÿòü ïðîìåæóòî÷íûå ðåçóëüòàòû, ò.ê. íà íà ñåðâåðå ñóùåñòâóåò ïðåäåëüíîå âðåìÿ âûïîëíåíèÿ ñêðèïòîâ (îáû÷íî 30-40 ñåêóíä). ïî èñòå÷åíèè êîòîðîãî ñêðèïò ïðèíóäèòåëüíî ïðåðûâàåòñÿ.
3. Îòñóòñòâóåò âîçìîæíîñòü ïëàíèðîâàíèÿ âûïîëíåíèÿ ñêðèïòà, ò.å. åñëè íè îäèí ïîëüçîâàòåëü íà ñàéò íå çàéä¸ò - âñå çàäà÷è îñòàíóòñÿ íåèñïîëíåííûìè.
4. Ïðè íåïðàâèëüíîé îáðàáîòêå îøèáîê îíè áóäóò îòîáðàæàòüñÿ â áðàóçåðå ïîëüçîâàòåëÿ. Ýòî ïëîõî ñàìî ïî ñåáå, à â íåêîòîðûõ ñëó÷àÿõ òàêèå îøèáêè ïðèâîäÿò åù¸ è ê "ðàñïîëçàíèþ" äèçàéíà.
5. Î÷åíü ñëîæíî ïëàíèðîâàòü íàãðóçêó íà ñåðâåð, ò.ê. ïîñåùàåìîñòü ñàéòà ìîæíî ïðåäñêàçàòü ëèøü ñ îïðåäåë¸ííîé âåðîÿòíîñòüþ.
Áîëåå îïòèìàëüíûì è ïðîñòûì ðåøåíèåì ÿâëÿåòñÿ èñïîëüçîâàíèå âíåøíèõ ïðîãðàìì-ïðàíèðîâùèêîâ. Íàïðèìåð, áîëüøèíñòâî Unix-ïðîâàéäåðîâ ïðåäîñòàâëÿþò äîñòóï ê ïðîãðàììå crontab, êîòîðàÿ äà¸ò âîçìîæíîñòü çàïëàíèðîâàòü âûïîëíåíèå ëþáûõ çàäà÷ íà îïðåäåë¸ííîå âðåìÿ èëè ñ çàäàííîé ïåðèîäè÷íîñòüþ. Ñrontab ïîçâîëÿåò âûïîëíÿòü ñêðèïòû PHP, ïðè ýòîì èíòåðïðåòàòîð çàïóñêàåòñÿ â ðåæèìå êîìàíäíîé ñòðîêè.
Êàê ïðàâèëî, â ïàíåëè óïðàâëåíèÿ õîñòèíãîì åñòü âèçóëüíûé èíòåðôåéñ äëÿ ðåäàêòèðîâàíèÿ cron-ïðàâèë. ×àùå âñåãî âñòðå÷àþòñÿ äâà òèïà èíòåðôåéñîâ - êëàññè÷åñêèé è ðàñøèðåííûé. Ôóíêöèîíàëüíî îíè èäåíòè÷íû, íî ðàñøèðåííûé âèä áîëåå íàãëÿäåí è ïîíÿòåí íà÷èíàþùåìó ïîëüçîâàòåëþ.  ëþáîì ñëó÷àå, ïðè ñîçäàíèè íîâîãî çàäàíèÿ âàì íåîáõîäèìî áóäåò óêàçàòü òðè ïàðàìåòðà: âðåìÿ çàïóñêà, ñêðèïò äëÿ çàïóñêà è àäðåñ ýëåêòðîííîé ïî÷òû, êóäà áóäåò íàïðàâëåí îò÷¸ò î âûïîëåíèè.
Âðåìÿ çàïóñêà çàäà¸òñÿ ïÿòüþ áëîêàìè: ìèíóòà, ÷àñ, äåíü_ìåñÿöà, ìåñÿö è äåíü_íåäåëè. Äëÿ êàæäîãî áëîêà ìîæíî óêàçàòü ïåðèîäè÷íîñòü, òî÷íîå çíà÷åíèå, äèàïàçîí èëè ñïèñîê çíà÷åíèé, à åñëè óêàçàòü "*" (çâ¸çäî÷êà), òî çíà÷åíèå ó÷èòûâàòüñÿ íå áóäåò. Íàïðèìåð:
// åæåíäåâíûé çàïóñê â 3:00 * 3 * * *
// çàïóñê ñêðèïòà êàæäûå ïÿòü ìèíóò // ("/" - îçíà÷àåò "êàæäûå")/ */5 * * * *
// åæå÷àñíûé çàïóñê ñêðèïòà // â ïîíåäåëüíèê ñ 3:00 äî 7:00 * 3-7 * * * mon
// åæå÷àñíûé çàïóñê ñêðèïòà // â ïîíåäåëüíèê ñ 3:00 äî 5:00 * 3,4,5 * * * mon
// çàïóñê â íîâûé ãîä 59 23 31 dec *
Âòîðîé ïàðàìåòð - ýòî ñîáñòâåííî èñïîëíÿåìàÿ êîìàíäà.  áîëüøèíñòâå ñëó÷àåâ êîìàíäà âûïîëíåíèÿ ñêðèïòà çàïèñûâàåòñÿ â ôîðìàòå <ïóòü_ê_èíòåðïðåòàòîðó> <ïîëíûé_ïóòü_ê_ñêðèïòó>. Ïðè ýòîì âñå ïóòè óêàçûâàþòñÿ ïîëíîñòüþ, íà÷èíàÿ îò êîðíåâîãî êàòàëîãà ñåðâåðà. Íàïðèìåð, èíòåðïðåòàòîð ðàñïîëîæåí â "./local/sbin/php5.exe", à èñïîëíÿåìûé ñêðèïò - â "web/http/service.php". Åñëè íàì íàäî âûïîëíÿòü ñêðèïò åæå÷àñíî, òî ñòðîêà çàäàíèÿ áóäåò ñëåäóþùåé:
0 * * * * /local/sbin/php5.exe /web/http/service.php
Òðåòèé ïàðàìåòð - àäðåñ ýëåêòðîííîé ïî÷òû - ââîäèòñÿ îäèí ðàç äëÿ âñåõ çàäàíèé. Ðåçóëüòàòû âûïîëíåíèÿ çàäà÷è áóäóò âûñûëàòüñÿ íà óêàçàííûé àäðåñ. Åñëè ñêðèïò áûë çàâåðøåí ñ îøèáêîé - â òåêñòå ïèñüìà áóäåò ñîîòâåòñòâóþùàÿ çàïèñü ñ óêàçàíèåì îøèáêè è ñòðîêè, ãäå îíà ïðîèçîøëà. Ê ñîæàëåíèþ, ñîîáùåíèÿ áóäóò ïðèõîäèòü è òîãäà, êîãäà âñ¸ ïðîøëî óñïåøíî, ïîýòîìó åñëè âû ðåøèëè âûïîëíÿòü ñêðèïò åæåìèíóòíî - ãîòîâüòåñü ïîëó÷àòü ïî øåñòüäåñÿò ïèñåì â ÷àñ.
Çàïóñê èíòåðïðåòàòîðà â ðåæèìå êîìàíäíîé ñòðîêè íàêëàäûâàåò íåêîòîðûå îãðàíè÷åíèÿ íà ïðîãðàììèñòà. Òàê, ñòàíîâÿòñÿ íåäîñòóïíû íåêîòîðûå ãëîáàëüíûå ìàññèâû è ïåðåìåííûå Apache. Ïîýòîìó íà crontab íå ñòîèò âîçëàãàòü çàäà÷è, òðåáóþùèå çíàíèÿ íàñòðîåê web-ñåðâåðà èëè äðóãèõ ñèñòåìíûõ ïàðàìåòðîâ.
Òàêèì îáðàçîì, åñëè âàø ïðîâàéäåð è ïðåäîñòàâëÿåò äîñòóï ê ïëàíèðîâùèêó çàäàíèé - îáÿçàòåëüíî ïîëüçóéòåñü èì è íå èçîáðåòàéòå âåëîñèïåä. Íó à åñëè óæ âûáîðà íå îñòà¸òñÿ è crontab íåäîñòóïåí - âûõîäèòå èç ïîëîæåíèÿ ñðåäñòâàìè PHP è ñîáñòâåííîé ñìåêàëêîé.