- Linux pakub ülesannete automatiseerimiseks täielikku ökosüsteemi: bash-skriptid, cron, anacron, at ja systemd taimerid katavad kõike alates ühekordsetest käivitamistest kuni keerukate ja korduvate ülesanneteni.
- Crontabide, keskkonnamuutujate, logide ja lukustusmehhanismide (nt flock) õige kasutamine on usaldusväärsete ja hõlpsasti hooldatavate automatiseeringute võti.
- Turvalisust ja jõudlust parandatakse automatiseeritud kontrollide abil: SSH turvalisuse tugevdamine, tulemüürid, SELinux, pakettide ja teenuste puhastamine ning optimeerimisprofiilid (nt Tuned).
- Orkestreerimistööriistad, näiteks Ansible, võimaldavad teil seda automatiseerimist laiendada kümnetele või sadadele serveritele, tagades järjepidevad ja korduvad konfiguratsioonid.

Kui kasutate Linuxit iga päev, saate varem või hiljem aru, et samade ülesannete pidev kordamine on tohutu ajaraiskamine . Käsitsi varundamine, ajutiste failide puhastamine, pakettide värskendamine, süsteemi oleku kontrollimine... kõik selle saab süsteemile delegeerida, nii et see toimub automaatselt, samal ajal kui teie tegelete huvitavamate asjadega (või magate rahulikult).
Linuxi ökosüsteem on aastakümneid loodud just selleks otstarbeks: ülesannete usaldusväärseks, paindlikuks ja turvaliseks automatiseerimiseks . Alates klassikalistest käskudest nagu cron ja at kuni anacroni ja systemd taimerite ning keerukama Ansible'ini – teil on lai valik tööriistu, mis katavad kõike alates lihtsaimast skriptist kuni sadade serverite orkestreerimiseni. Selles juhendis toome kõik need osad kokku ja muudame need praktiliseks üksikasjalike selgituste ja selgete näidete abil.
Mida tähendab automatiseerimine Linuxis ja miks peaks see sind huvitama?
Linuxis automatiseerimise all peame silmas käskude, skriptide või teenuste täitmise ajastamist ilma inimese sekkumiseta , olgu see siis ühekordne või korduv. See kehtib kõige kohta alates isiklikust sülearvutist kuni tootmisserveri klastrini.
Automatiseerimisel on mitu selget eelist: see vähendab inimlikke vigu, kõrvaldades korduvaid ülesandeid, säästab aega, tagab kriitiliste ülesannete alati sama täpsusega täitmise ja võimaldab standardiseeritud süsteemihaldust. Linux on selles eriti hea, kuna see on algusest peale loodud töötama skriptide ja konsoolitööriistadega, mida saab hõlpsasti kombineerida.
On tõsi, et mõned kardavad, et liigne automatiseerimine tekitab tehnoloogilist sõltuvust või et käsitsi tehtavad teadmised lähevad kaotsi, kuid hästi kasutades vabastab see aega väärtuslikumate ülesannete jaoks : arhitektuuri kujundamiseks, turvaanalüüsiks, protsesside täiustamiseks või arenduseks endale.
Igapäevases kasutuses tugineb Linuxi automatiseerimine tavaliselt mitmele sambale: Bash-skriptid, cron/anacron, at, systemd taimerid ja konfiguratsioonihaldustööriistad nagu Ansible . Igaüks neist vastab erinevale vajadusele, mida me üksikasjalikumalt uurime.
Cron: perioodilise automatiseerimise oluline klassika
Kui on üks tööriist, mida iga Linuxi administraator peaks peast teadma, siis on see cron. Cron on deemon, mis töötab taustal ja käivitab käske või skripte kindlatel aegadel : iga minut, iga tund, iga päev, iga nädal, iga kuu või keerukamates kombinatsioonides.
Selle nimi tuleb kreekakeelsest sõnast "chronos", mis tähendab aega , ja see on Unixis olemas olnud 70. aastate lõpust. Enamik tänapäevaseid distributsioone (Debian, Ubuntu, Fedora jne) kasutavad mingit Vixie Croni varianti, mis on väga hästi testitud ja stabiilne. Tootmiskeskkondade jaoks on see põhikomponent, peaaegu sama oluline kui kernel ise.
Croni kasutamine võimaldab automatiseerida selliseid asju nagu öised varukoopiad, logide rotatsioon, jälgimisülesanded, hooldusskriptid ja aruannete genereerimine . Filosoofia on lihtne: teie määrate, mida ja millal käivitada, ning cron hoolitseb ülejäänu eest ilma graafilise liidese või keerukate protseduurideta.
Lisaks on cron saadaval praktiliselt igas Unixi-laadses süsteemis, seega on croniga õpitu kasulik paljudes erinevates keskkondades , alates odavast VPS-ist kuni ettevõtte serverini.
Linuxi croni arhitektuur: deemon, crontabid ja spetsiaalsed kataloogid
Croni tõhusaks kasutamiseks on kasulik mõista selle sisemist struktuuri. Laias laastus keerleb süsteem crond-deemoni, crontab-failide ja mitmete süsteemi hallatavate spetsiaalsete kataloogide ümber.
Croni deemon käivitub süsteemist (tavaliselt systemd või vastava init-käsu kaudu) ja jääb ärkvele, kontrollides iga minut, kas käivitatavaid ülesandeid on vaja käivitada . Kui see tuvastab rea, mis vastab praegusele minutile, käivitab see uues shelliprotsessis vastava käsu.
Igal süsteemikasutajal võib olla oma ajastamisfail, mida nimetatakse crontabiks. Kasutaja crontabid salvestatakse tavaliselt sellistesse teedesse nagu /var/spool/cron/ või /var/spool/cron/crontabs/ , olenevalt distributsioonist. Oluline on neid mitte käsitsi muuta, vaid pigem käsu `crontab` abil , mis valideerib süntaksi ja teavitab cron-deemonit kõigist muudatustest.
Lisaks kasutaja crontabidele on olemas ka süsteemiülesed croni mehhanismid : fail /etc/crontab, kataloog /etc/cron.d/ ja perioodilised kataloogid /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly ja /etc/cron.monthly. Viimased kataloogid sisaldavad skripte, mida süsteem perioodiliselt käivitab, kasutades selliseid tööriistu nagu anacron või run-parts.
Üldine idee on selles, et cron-deemon toidab neid faile ja katalooge , kontrollides iga minut, kas midagi on vaja käivitada. See modulaarne arhitektuur teeb süsteemipakettidel oma ülesannete installimise lihtsaks ilma globaalset konfiguratsiooni mõjutamata.
crontabi süntaks: viis välja ja nende operaatorid
Üks asi, mis sulle croni kasutama hakates kõige enam meelde jääb, on selle ridade süntaks. Iga kirje kasutaja crontab-failis koosneb viiest ajaväljast ja käivitatavast käsust . Kuigi me ei hakka tabelit sõna-sõnalt taasesitama, on standardväljad minut, tund, kuu päev, kuu ja nädalapäev.
Iga väli aktsepteerib arvväärtusi, vahemikke, komadega eraldatud loendeid, kaldkriipsuga samme ja isegi tüüpilist tärni, mis tähistab kõiki võimalikke väärtusi. Tänu nendele operaatoritele saate väljendada keerulisi mustreid ilma, et peaksite kirjutama kakskümmend erinevat rida.
Lisaks aktsepteerivad paljud croni rakendused spetsiaalseid otseteid, näiteks @daily, @hourly, @weekly, @monthly, @reboot ja sarnaseid. Need aliased lihtsustavad tavalisi toiminguid, nii et te ei pea isegi väljade järjekorda meeles pidama.
Failidega /etc/crontab või /etc/cron.d/ töötades lisatakse kuues väli kasutaja määramiseks, kelle all ülesanne käivitatakse . See on ülioluline süsteemiülesannete puhul, mida tuleb käivitada root- või muude teenusekontodega.
Selle süntaksi päheõppimine ja mõne reaalse näitega harjutamine on see, mis teebki kohmaka croni kasutamise eriliseks puhtast, loetavast ja aja jooksul hõlpsasti hooldatavast automatiseeringust.
Professionaalne crontab-haldus: redigeerimine, loetlemine ja versioonimine
Crontab- käsk on ametlik liides kasutaja ajastatud ülesannetega töötamiseks. Selle abil saate oma crontab-faili luua, muuta, loetleda ja isegi kustutada ning mis kõige tähtsam, väldite sisemiste süsteemifailide otsest muutmist , mis vähendab vigu ja lubadega seotud probleeme.
Tõsistes keskkondades on soovitatav hoida crontab'i sisu versioonitud tekstifailides, kasutades Giti . Nii saate üle vaadata, kes mida ja millal muutis, võrrelda vanemaid versioone ja kiiresti taastada eelmise konfiguratsiooni, kui pärast muutmist midagi katki läheb.
Samuti on võimalik crontab installida välisest failist, mis toimib väga hästi automatiseeritud juurutamisprotseduuride või infrastruktuuri koodina . Nii saate iga serveri käsitsi redigeerimise asemel saata sama faili kõigile ja rakendada muudatusi ühtlaselt.
Praktikas dokumenteerivad kogenud administraatorid tavaliselt iga rea eelneva kommentaariga, rühmitavad seotud ülesanded ning säilitavad selge nimetamiskonventsiooni ja teed cronis kasutatavate skriptide jaoks. See distsipliin teeb elu kuude pärast palju lihtsamaks.
Croniga automatiseeritud ülesannete levinumad näited
Croni potentsiaali mõistmiseks vaadake lihtsalt tüüpilisi kasutusjuhtumeid. Üks sagedasemaid on rutiinne süsteemihooldus : logide vahetamine ja tihendamine, ajutiste failide puhastamine, otsinguindeksite taastamine või vanade varukoopiate kustutamine.
Teine väga levinud blokk on ülesannete jälgimine . Suhteliselt tavaline on skriptide käivitamine, mis kontrollivad ketta kasutust, süsteemi koormust, teatud teenuste tervist või mälukasutust ning kui nad tuvastavad ohtliku läve, genereerivad nad logi, saadavad e-kirja või käivitavad hoiatuse välisele süsteemile.
Arendus- ja andmebaaside valdkonnas on cronil samuti palju potentsiaali. Näiteks ajastatud ülesandeid kasutatakse andmebaaside varundamiseks, mõõdikuid genereerivate skriptide käivitamiseks või aruannete CSV-failidesse eksportimiseks või isegi väikeste andmetöötlustorustike orkestreerimiseks.
Kõike seda toetavad peaaegu alati Bashi skriptid või muud keeled, mis tegeliku töö ära teevad, samas kui cron hoolitseb "millal" eest. See vastutuse lahusus hoiab crontabi puhtana ja äriloogika eraldi failidesse kapseldatuna.
Croni keskkonnamuutujad: klassikaline vigade allikas
Üks levinumaid vigu, mida inimesed croniga alustades teevad, on eeldada, et ülesanded töötavad samas keskkonnas kui interaktiivses terminalis töötades . Miski ei saaks olla tõest kaugemal: cron käivitab käske väga piiratud kontekstis, piiratud PATH-iga ja ilma teie shelli kohandusteta.
See tähendab, et paljud skriptid, mis käsitsi käivitamisel ideaalselt töötavad, ebaõnnestuvad croni all, kuna nad ei leia binaarfaile, ei leia suhtelisi teid või sõltuvad keskkonnamuutujatest, mida pole olemas . Lahendus on lihtne: defineerige PATH ja kõik muud vajalikud muutujad selgesõnaliselt crontabis endas või skriptis.
Samuti on tavaline, et e-posti käitumist kontrollitakse muutuja `MAILTO` abil , nii et ülesannete standardväljund saadetakse kas kasutaja postkasti või kustutatakse. Keskkondades, kus e-posti süsteem pole konfigureeritud, on soovitatav suunata väljund failidesse `/dev/null` kaustas, et vältida vaikset akumuleerumist.
Kokkuvõttes tuleb cron-tööde loomisel mõelda, et need töötaksid omamoodi "minimalistlikus keskkonnas" ja et kõik, mida skript vajab, tuleb selgesõnaliselt deklareerida.
/etc/crontab ja /etc/cron.dy on perioodilised kataloogid
Lisaks individuaalsetele crontabidele pakub Linux süsteemset crontabi, mis asub tavaliselt aadressil /etc/crontab . See fail erineb kasutaja crontabidest selle poolest, et see sisaldab täiendavat välja konto määramiseks, mille alt käsku täidetakse, mis on oluline globaalsete ülesannete jaoks.
See fail määratleb tavaliselt muuhulgas skriptide täitmise failides /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly ja /etc/cron.monthly . Paljudes süsteemides on need täitmised delegeeritud sellistele tööriistadele nagu anacron, mis tagavad ülesannete täitmise isegi siis, kui arvuti pole täpsel ajal sisse lülitatud.
Kataloog /etc/cron.d/ sisaldab täiendavaid crontab-faile, mis tavaliselt installitakse süsteemipakettide või väliste tööriistade abil. Iga fail järgib sama vormingut kui /etc/crontab, sealhulgas kasutaja väli. See on soovitatav viis süsteemiülesannete lisamiseks ilma peamist crontab-faili muutmata , parandades hooldust ja vältides konflikte värskenduste ajal.
Tüüpiline töövoog on selline, et cron-deemon kontrollib neid faile perioodiliselt ja käivitab koos anacroni või run-partsiga sobival ajal asjakohastes kataloogides olevad skriptid . Teie kui administraator peate lihtsalt tagama, et teie skriptid on korralikult ette valmistatud ja õigesse kohta paigutatud.
Anacron: kui seadmed pole alati sisse lülitatud
Croni teadaolev piirang on see, et kui arvuti lülitatakse välja ajal, mil ülesanne peaks käivituma, siis see ülesanne kaob. Anacron loodi just selle lünga täitmiseks , eriti masinate puhul, mis ei ole ööpäevaringselt sisse lülitatud, näiteks sülearvutid või kontorilauad.
Anacron ei tugine niivõrd täpsele kuupäevale ja kellaajale, kuivõrd päevade arvule, mis on möödunud ülesande viimasest täitmisest. Süsteemi käivitamisel kontrollib see, millised päeva-, nädala- või kuuülesanded on vahele jäetud, ja ajastab need ümber väikese, konfigureeritava viivitusega.
See minutites väljendatud viivitusväli on oluline, kuna see takistab kõigi ootel olevate tööde samaaegset käivitamist käivitamisel , mis võiks süsteemi üle koormata. Selle asemel on need jaotatud, mis võimaldab arvutil järk-järgult käivituda.
Paljudes tänapäevastes süsteemides, kui anacron on olemas, vastutab see skriptide eest failides /etc/cron.daily, /etc/cron.weekly ja /etc/cron.monthly, samas kui cron tegeleb täpsemate ja sagedasemate ülesannetega. See kombinatsioon muudab automatiseerimise töökindlaks isegi sageli välja lülitatud masinate puhul.
Käsk at: ühekordne täitmine tulevikus
Kuigi cron ja anacron keskenduvad korduvatele ülesannetele, hõlmab käsk at väga lihtsat ja kasulikku juhtumit: käsu ajastamist nii, et see käivituks ainult üks kord kindlal tulevasel ajal. See on nagu süsteemi märkuse jätmine millegi tegemiseks "homme kell 9:30" või "2 tunni pärast".
Funktsiooni `at` süntaks on üsna kasutajasõbralik ja võimaldab loomulikke ajaavaldisi. Kui olete ülesande defineerinud, salvestab süsteem selle järjekorda ja käivitab selle ajastatud ajal . Pärast seda kaob ülesanne, erinevalt funktsioonist `cron`, mis hoiab ülesannet seni, kuni seda muudate või kustutate.
See tööriist on eriti mugav ühekordsete ülesannete jaoks, mida te ei soovi unustada, kuid mis ei ole korduvate ülesannetena mõistlikud : ajastatud taaskäivitused, hooldustööd pärast tööakna lõppu või testid, mis tuleb käivitada kindlal ajal.
Koos heade skriptidega saab `at`-ist elegantne metamärk, mille olemasolu paljud kasutajad unustavad, kuid mis lihtsustab oluliselt igapäevaseid ülesandeid, kui uue cron-kirje loomine pole seda väärt.
systemd taimerid: croni kaasaegne alternatiiv
Tänapäevastes distributsioonides, mis kasutavad systemd-d (Ubuntu, Debian, Fedora, CentOS ja paljud teised), on ülesannete ajastamiseks veel üks viis: systemd taimerid . Crontabidele lootmise asemel defineeritakse siin teenuseühikud (.service) ja taimeriühikud (.timer), mida systemd haldab samamoodi nagu teisi teenuseid.
Systemd taimerid paistavad silma selle poolest, et nad integreeruvad sujuvalt ülejäänud systemd ökosüsteemiga : olekut, logisid ja sõltuvusi saab vaadata samade tuttavate tööriistade (journalctl, systemctl jne) abil. See sobib ideaalselt keerukate tööde jaoks, mis peavad käivituma pärast teisi teenuseid, jõustama taaskäivituspoliitikaid või haldama üksikasjalikke logisid.
Tüüpiline taimer koosneb teenusefailist, mis määratleb, mida käivitatakse (skript, binaarfail, konkreetne toiming), ja taimerifailist, mis määrab, millal ja kui tihti seda käivitatakse. Systemd pakub paindlikke kalendriavaldisi ja -valikuid, näiteks persistence , mis paneb töö käivitamise ka pärast seiskamist, kui see vahele jäi.
Croni ja systemd taimerite vahel valides on hea rusikareegel küsida endalt, kas vajate sisseehitatud logimist, teenusesõltuvusi või täiustatud püsivust . Kui vastus on jah, on taimer tavaliselt parem. Lihtsate ja universaalsete ülesannete jaoks on cron endiselt kogenud ja täiesti sobiv valik.
Lõppkokkuvõttes pole kahe lähenemisviisi vahel konflikti: croni saab kasutada lihtsate ülesannete jaoks ja taimerit keerukamate jaoks , ilma et samas süsteemis koos eksisteerimine probleeme tekitaks.
Turvalisus ja juurdepääsu kontroll Cronis
Kuna cron saab vastavate kasutajaõigustega käivitada praktiliselt iga käsu, on turvalisus ülioluline küsimus. Linux sisaldab turvamehhanisme, mis põhinevad failidel /etc/cron.allow ja /etc/cron.deny , mis määravad, millised kasutajad saavad croni kasutada.
Sõltuvalt konfiguratsioonist saab süsteem lubada cron-töid ainult valges nimekirjas olevatele kasutajatele või keelata need otseselt mustas nimekirjas olevatele kasutajatele. Nende failide nõuetekohane haldamine on ülioluline mitme kasutajaga keskkondades või avatud serverites , kus on ebasoovitav, et ükski konto saaks ressursse halvasti kavandatud ülesannetega üle koormata.
Lisaks on soovitatav piirata, millised skriptid töötavad root'ina, ja hoolikalt üle vaadata kõigi ajastatud ülesannete kood kõrgete õigustega. Lihtne möödalaskmine cron-skriptis administraatoriõigustega võib avada väga tõsise turvaauke.
Täiustatud kontekstides saavad sellised tööriistad nagu SELinux või AppArmor lisada täiendavaid kontrollikihte croni käivitatud protsesside üle, tugevdades veelgi süsteemi turvalisust.
Croni tööde silumine: metoodika ja tüüpilised vead
Kui ajastatud ülesanne ei tee ootuspäraselt, pole parim strateegia sihitult nokitseda, vaid pigem järgida lihtsat diagnostilist metoodikat . Esimene samm on levitamise teenindustööriistade abil veenduda, et cron-deemon on tõepoolest aktiivne ja lubatud.
Järgmisena peaksite üle vaatama süsteemilogid ja kõik cron-spetsiifilised logid. Sageli leiate crontabist süntaksivigu, lubadega seotud probleeme või skripti käivitamise tõrkeid, mis polnud kohe ilmne.
Järgmine loogiline samm on käsitsi käivitada skript või käsk, mida cron proovib käivitada, kuid simuleerida croni keskkonda nii hästi kui võimalik : sama kasutaja, samad teed, ilma interaktiivse shelli aliaste või funktsioonideta.
Kõige levinumate vigade hulka kuuluvad: standard- ja veaväljundi ümbersuunamise unustamine, suhteliste teede kasutamine, mis cron'i käivitamisel skripti ei mõista, eeldamine, et PATH sisaldab katalooge, mida tegelikult pole, või sama ülesande mitme eksemplari ajalise kattumise võimaluse mittearvestamine.
Nende probleemide lahendamine hõlmab kõige selgesõnalist defineerimist, absoluutsete teede kasutamist, silumislogide lisamist ja ülesannete kaitsmist samaaegsete täitmiste eest, kui see on võimalik.
Croni head professionaalsed tavad
Aastate jooksul on süsteemiadministraatorite kogukond välja töötanud rea soovitusi, mis teevad vahet nelja cron-töö juhusliku seadistamise ja automatiseerimise professionaalse haldamise vahel.
Kuldreegel on alati suunata iga ülesande väljund logifaili, oa /dev/null . Vastasel juhul proovib cron selle väljundi kasutajale meilida, mis võib täita root'i postkaste või lihtsalt kaduma minna, kui meilisüsteem pole konfigureeritud, muutes tõrkeotsingu äärmiselt keeruliseks.
Teine oluline tava on pakendada loogika eraldi skriptidesse, selle asemel et kirjutada pikki käske otse crontabi . See lihtsustab skripti versioonimist, käsitsi testimist, dokumenteerimist ja taaskasutamist.
Kattuvate probleemide vältimiseks võimaldavad sellised tööriistad nagu flock rakendada lihtsaid blokeerimismehhanisme: kui üks ülesande eksemplar töötab endiselt, siis järgmine kas ootab või lõpetab töö ilma täitmiseta. See on ülioluline suuremahuliste varundus- või andmetöötlusülesannete puhul.
Lõpuks on hea mõte kommenteerida iga crontab'i rida selge kirjeldusega ja hoida faili versioonikontrolli all Giti või sarnaste süsteemidega . Aja möödudes (või administraatori vahetudes) on need kommentaarid ja muudatuste ajalugu hindamatu väärtusega.
Bash-skriptimine: mootor, mis käivitab automatiseeringuid
Kõik eelnev jääb nõrgaks, kui meil pole midagi kasulikku käivitada, ja siin tulevadki mängu Bashi skriptid. Skript on lihtsalt tekstifail käskudega, mida shell üksteise järel täidab , justkui kirjutaksid sa neid ise, aga väsimata.
Ajalooliselt on shelliskriptid olnud Unixi automatiseerimise keskmes alates 70. aastatest. Bashi tulekuga paljudesse distributsioonidesse vaikimisi shelliks konsolideeriti lihtne, kuid võimas skriptimiskeel , mis sobib ideaalselt süsteemikomponentide ühendamiseks, failide töötlemiseks ja väliste programmide koordineerimiseks.
Praktilisel tasandil algab tüüpiline Bashi skript reaga #!/bin/bash , et näidata shelli, mis peaks seda tõlgendama, defineerima muutujad, käivitama käske, kasutama tingimuslauseid ja tsükleid ning lisama informatiivseid sõnumeid kaja abil, et me teaksime, mis toimub.
On olemas väga lihtsaid skripte, mis liigutavad vaid mõnda faili, ja palju keerukamaid skripte, mis teevad täielikke varukoopiaid, genereerivad aruandeid ning töötavad koos croni või at-ga automaatselt regulaarsete intervallidega.
Peamine on see, et iga ülesanne, mida terminalis liiga sageli korratakse, on ideaalne kandidaat skriptiks saamiseks, säästes teie aega ja rumalaid vigu keskpikas perspektiivis.
Praktiline näide: igapäevane varundamine Bashi ja croniga
Väga levinud stsenaarium on soov luua igapäevane varukoopia konkreetsest olulisest kaustast . Bashiga saab selle teha vaid mõne koodireaga, luues kataloogi praeguse kuupäevaga ja lisades sinna asjakohased andmed.
Üldine loogika on tavaliselt midagi sellist: genereeri tänase kuupäevaga string, loo sihtkoha tee, mis seda sisaldab, loo see kataloog, kui seda pole olemas, kopeeri rekursiivselt oma olulised andmed ja lõpuks kuva teade, mis näitab, et varundamine on edukalt lõpule viidud.
Kui kombineerida see ka varundamise krüptimisega, Linuxis tar/gz kasutamisega või turvalise transpordiga teisele serverile VPN-i või SSH-tunnelite kaudu, saab luua korraliku varundusstrateegia ilma suuremate komplikatsioonideta , tuginedes ainult klassikalistele Linuxi tööriistadele.
Selle skripti saab salvestada kausta nagu /usr/local/sbin või oma skriptide kausta ja anda sellele täitmisõigused. Seejärel saab croni abil ajastada selle automaatse täitmise ajale, mil server on madala koormuse all , näiteks igal õhtul südaööl.
Kui kombineerite selle ka varukoopiate krüptimisega või turvalise transpordiga teisele serverile VPN-i või SSH-tunnelite kaudu, saate ilma suuremate komplikatsioonideta luua korraliku varundusstrateegia , tuginedes ainult klassikalistele Linuxi tööriistadele.
Bash-skriptidega automatiseerimise põhitõed: esimesed sammud
Kui alles alustad skriptimisega, on kõige targem liikuda samm-sammult edasi. Esmalt loo tühi fail, redigeeri seda oma lemmikredaktoriga, lisa paar koodirida , salvesta see, anna sellele käivitusõigused ja testi seda.
Esimesed harjutused hõlmavad tavaliselt lihtsate toimingute automatiseerimist, näiteks failide loetlemist, nende teisaldamist kindlatesse kaustadesse või ajutiste kataloogide puhastamist . See aitab teil tutvuda süntaksi, muutujate, õiguste ja väljundsõnumitega.
Hiljem võid kaaluda skripte, mis salvestavad aeg-ajalt kuupäeva ja kellaaja logisse, teevad öösel /etc/ failist tihendatud koopiaid või kontrollivad kettaruumi ja saadavad hoiatuse, kui teatud kasutusprotsent on ületatud.
Väga hea tava on kasutada veaotsingu tööriistana `echo` , nii et skript prindib välja, millist sammu see täidab, võtmemuutujate väärtused ja kas on esinenud probleeme. See lihtsustab oluliselt loogikavigade leidmist.
Harjutamisega lood lõpuks väikese "isikliku skriptide kogu", millest saavad sinu vaiksed assistendid, mis on tänu cron, at või systemd taimeritele valmis iseseisvalt töötama.
Automatiseerimine ja turvalisus: Linuxi serveri tugevdamine
Peaaegu iga kord, kui tõsiste serverite puhul automatiseerimisest räägitakse, pöördub vestlus paratamatult turvalisuse poole. Linuxi serveri tugevdamine hõlmab selle rünnakupinna vähendamist, parimate tavade rakendamist ja turvakontrollide automatiseerimist, et need ei sõltuks käsitsi tagasikutsumisest.
Esimene oluline samm on kasutajakonto haldamine . Soovitatav on vältida üldisi või ilmseid kasutajanimesid (nt "admin" või "oracle"), kasutada vähem etteaimatavaid nimesid, kehtestada tugevad paroolipoliitikad perioodilise aegumisega ja kohandada UID-vahemikke nii, et neid poleks lihtne ära arvata.
Teine murekoht on installitud paketid. Mida rohkem ebavajalikku tarkvara teil on, seda suuremaks muutub teie rünnakupind. Seetõttu on hea tava loetleda installitud pakette, eemaldada mittevajalikud ja jälgida sõltuvusi, et vältida kriitiliste teenuste tahtmatut rikkumist.
Samuti peaksite kontrollima töötavaid teenuseid selliste tööriistadega nagu systemctl, peatama ja keelama need, mis midagi ei panusta, ning kontrollima kuulamisporte selliste utiliitidega nagu netstat või ss, et veenduda, et avatud on ainult hädavajalikud.
Kui lisada hea SSH kaitse (otsese root-sisselogimise keelamine, võtme autentimise kasutamine, ajalõpude reguleerimine) ja tulemüüride (nt firewalld või iptables) kasutamine, saame mitu kaitsekihti väliste rünnakute eest ilma liigsete komplikatsioonideta.
SELinux, tulemüürid ja optimeerimine häälestatud versiooniga
Keskkondades, kus turvalisus on prioriteet, toimivad sellised tööriistad nagu SELinuxi tugevdamine kohustusliku juurdepääsukontrolli täiendava barjäärina, piirates seda, millised protsessid saavad lisaks traditsioonilistele õigustele mida teha.
Oluline on kontrollida SELinuxi olekut, eelistatavalt konfigureerides selle range jõustamise režiimis ja kohandades poliitikaid vastavalt süsteemi vajadustele, kasutades spetsiaalseid utiliite. Kuigi see võib alguses tunduda hirmutav, blokeerib see õigesti konfigureerituna palju soovimatuid toiminguid.
Võrgukeskkonnas võimaldavad firewalld või iptables määratleda sissetuleva ja väljamineva liikluse jaoks üksikasjalikud reeglid , avades ainult teatud teenuseid, näiteks SSH, HTTP või mis iganes on tõeliselt vajalik. See vähendab oluliselt potentsiaalsete rünnakute arvu.
Teisest küljest on olemas tööriistad nagu Tuned, mis on loodud süsteemi jõudluse optimeerimiseks , kasutades eelnevalt määratletud profiile, mis põhinevad töökoormuse tüübil: server, töölaud, virtuaalsed külalised jne. Sobiva profiili aktiveerimine ja Tune'i teatud parameetrite haldamise lubamine säästab aega ja parandab üldist jõudlust.
Kõik see on mõttetu, kui seda tehakse vaid üks kord ja siis unustatakse. Turvalisus ja jõudlus nõuavad pidevat ülevaatamist, regulaarseid parandusi ja pidevat jälgimist ning just siin tulebki mängu automatiseerimine: paljusid neist rutiinsetest ülesannetest saab ajastada nii, et need töötaksid iseseisvalt.
Ansible: ulatuslik automatiseerimine ja konfiguratsioonihaldus
Kui skaleeritakse ühest või kahest serverist kümnete või sadade serveriteni, ei suuda cron ja kohalikud skriptid järjepidevust säilitada. Ansible tuleb esile automatiseerimise ja konfiguratsioonihalduse tööriistana , mis ei vaja sõlmedes agente ning tugineb SSH-le ja loetavatele YAML-failidele.
Ansible'iga saate defineerida hostivarusid, genereerida SSH-võtmepaare paroolivaba autentimiseks ja automatiseerida Linuxi süsteemi administreerimist , kirjutades käsiraamatuid, mis kirjeldavad serverite soovitud olekut : millised paketid tuleks installida, millised teenused on aktiivsed, millised konfiguratsioonifailid on olemas jne.
Suur eelis on see, et saate sama käsiraamatut korraga mitmele süsteemile rakendada ja saada järjepideva ja korratava tulemuse , mida oleks väga raske saavutada, kui iga administraator rakendaks muudatusi käsitsi. Lisaks on Ansible idempotentne: sama käsiraamatu mitu korda käitamine ei riku midagi; see lihtsalt tagab, et kõik on nii, nagu peaks.
Näiteks saab lihtne käsiraamat tmuxi installimisega kõikidele "veebi" grupi serveritele hakkama vaid mõne koodireaga. Sealt edasi saab luua keerukamaid automatiseeringuid: rakenduste juurutamine, hulgikonfiguratsiooni muudatused, võtmete roteerimine jne.
Turvalisuse kontekstis on Ansible ideaalne turvalisuse tugevdamise poliitikate rakendamiseks, tulemüüride konfigureerimiseks, SSH häälestamiseks või auditiskriptide tsentraliseeritud juurutamiseks kõigisse sõlmedesse, vältides möödalaskmisi ja kõrvalekaldeid.
Igapäevane automatiseerimine: näited ja tööfilosoofia
Lisaks konkreetsetele tööriistadele kujuneb aja jooksul välja ka mõtteviis: iga kord, kui midagi paar korda käsitsi kordad, tasub endalt küsida, kas seda ei saaks automatiseerida . Linux on selleks sõna otseses mõttes loodud.
Mõned inimesed näevad terminali isegi vaikse abilisena, mis teeb taustal asju teie eest: ajastab e-posti meeldetuletusi, loob iganädalasi kokkuvõtteid, sünkroonib katalooge kaugserveritega või puhastab allalaadimis- ja ajutisi kaustu ilma, et peaksite sõrmegi liigutama.
Isegi tihti tähelepanuta jäetud tööriistad nagu `at` võimaldavad teil ajastada ühekordse käivitamise homseks kindlal ajal ilma cron-töö vaevata . Koos hästi struktureeritud skriptidega muudavad need utiliidid teie Linuxi süsteemi omamoodi digitaalseks "nõudepesumasinaks", mis tegeleb korduvate ülesannetega.
Oluline on läheneda automatiseerimisele terve mõistuse ja arukusega : asi ei ole automatiseerimises trendi pärast, vaid selles, et hinnata, millised ülesanded on aeganõudvad, altid inimlikele vigadele või avaldavad mõju, kui need unustatakse, ning seada need esikohale.
Aja jooksul kirjutad endale lõpuks väikeseid harjutusi: cron-töid, mis salvestavad kuupäeva ja kellaaega, et kontrollida süntaksi õigsust, varundusskripte, jälgimisskripte ja isegi mõne sellise ülesande teisendamist süsteemi taimeriteks koos püsivuse ja juhuslike viivitustega koormuse jaotamiseks.
Kõik need tükid – Bash-skriptid, cron, anacron, at, systemd taimerid, Ansible, turvalisuse parimad tavad, tulemüürid ja optimeerimisvahendid – kokku pannes lood keskkonna, kus Linux töötab sinu heaks ööpäevaringselt, haldades varukoopiaid, tugevdades turvalisust ja hoolitsedes jõudluse eest , samal ajal kui sina keskendud vähem mehaanilistele ja huvitavamatele probleemidele.
