Automatizācija Linux vidē: no cron un bash līdz Ansible un systemd

Pēdējā atjaunošana: 9 aprīlis 2026
  • Linux piedāvā pilnīgu uzdevumu automatizācijas ekosistēmu: Bash skripti, cron, anacron, at un systemd taimeri aptver visu, sākot no vienreizējām izpildēm līdz sarežģītiem un atkārtotiem uzdevumiem.
  • Pareiza crontabu, vides mainīgo, žurnālu un bloķēšanas mehānismu, piemēram, flock, lietošana ir uzticamu un viegli uzturējamu automatizāciju atslēga.
  • Drošību un veiktspēju uzlabo automatizētas kontroles: SSH aizsardzības stiprināšana, ugunsmūri, SELinux, pakotņu un pakalpojumu tīrīšana un optimizācijas profili, piemēram, tuned.
  • Orķestrācijas rīki, piemēram, Ansible, ļauj paplašināt šo automatizāciju līdz desmitiem vai simtiem serveru, nodrošinot konsekventas un atkārtojamas konfigurācijas.

automatizācija operētājsistēmā Linux

Ja ikdienā lietojat Linux, agrāk vai vēlāk jūs sapratīsiet, ka nepārtraukta vienu un to pašu uzdevumu atkārtošana ir milzīga laika izšķiešana . Manuālas dublējumkopijas, pagaidu failu tīrīšana, pakotņu atjaunināšana, sistēmas statusa pārbaudes… to visu var deleģēt sistēmai, lai tas notiktu automātiski, kamēr jūs darāt interesantākas lietas (vai mierīgi guļat).

Linux ekosistēma gadu desmitiem ir veidota tieši šim nolūkam: lai uzticami, elastīgi un droši automatizētu uzdevumus . Sākot ar klasiskām komandām, piemēram, cron un at, līdz pat anacron un beidzot ar systemd taimeriem un sarežģītāko Ansible, jums ir pieejams plašs rīku klāsts, kas aptver visu, sākot no vienkāršākā skripta līdz simtiem serveru orķestrēšanai. Šajā rokasgrāmatā mēs apkoposim visus šos elementus un padarīsim tos praktiskus ar detalizētiem skaidrojumiem un skaidriem piemēriem.

Ko nozīmē automatizācija operētājsistēmā Linux un kāpēc jums par to būtu jādomā?

Runājot par automatizāciju Linux sistēmā, mēs domājam komandu, skriptu vai pakalpojumu izpildes plānošanu bez cilvēka iejaukšanās , neatkarīgi no tā, vai tas notiek vienreizēji vai atkārtoti. Tas attiecas uz visu, sākot no personīgā klēpjdatora līdz pat ražošanas serveru klasterim.

Automatizācijai ir vairākas nepārprotamas priekšrocības: tā samazina cilvēciskās kļūdas, novēršot atkārtotus uzdevumus, ietaupa laiku, nodrošina, ka kritiski uzdevumi vienmēr tiek izpildīti ar vienādu precizitāti , un ļauj standartizēt sistēmas administrēšanu. Linux šajā ziņā ir īpaši labs, jo tas tika izstrādāts no paša sākuma, lai darbotos ar skriptiem un konsoles rīkiem, kurus var ļoti viegli kombinēt.

Ir taisnība, ka daži baidās, ka pārmērīga automatizācija radīs tehnoloģisko atkarību vai ka manuālās zināšanas tiks zaudētas, taču, pareizi izmantotas, tās atbrīvo laiku vērtīgākiem uzdevumiem : arhitektūras projektēšanai, drošības analīzei, procesu uzlabošanai vai pašai izstrādei.

Ikdienas lietošanā automatizācija operētājsistēmā Linux parasti balstās uz vairākiem pīlāriem: Bash skriptiem, cron/anacron, at, systemd taimeriem un konfigurācijas pārvaldības rīkiem, piemēram, Ansible . Katrs no tiem risina atšķirīgas vajadzības, kuras mēs detalizēti aplūkosim.

Cron: periodiskās automatizācijas būtiskākā klasika

ieplānotie uzdevumi operētājsistēmā Linux

Ja ir viens rīks, kas katram Linux administratoram būtu jāzina no galvas, tas ir cron. Cron ir dēmons, kas darbojas fonā un palaiž komandas vai skriptus noteiktā laikā : katru minūti, katru stundu, katru dienu, katru nedēļu, katru mēnesi vai sarežģītākās kombinācijās.

Tā nosaukums cēlies no grieķu vārda "chronos", kas apzīmē laiku , un tas ir bijis Unix sistēmā kopš 70. gs. septiņdesmito gadu beigām. Lielākā daļa mūsdienu distribūciju (Debian, Ubuntu, Fedora utt.) izmanto kādu Vixie Cron variantu, kas ir ļoti labi pārbaudīts un stabils. Ražošanas vidē tas ir fundamentāls komponents, gandrīz tikpat svarīgs kā pats kodols.

Izmantojot cron, varat automatizēt tādas lietas kā ikvakara dublējumkopijas, žurnālu rotāciju, uzraudzības uzdevumus, apkopes skriptus un pārskatu ģenerēšanu . Filozofija ir vienkārša: jūs definējat, kas un kad jāizpilda, un cron parūpējas par pārējo, bez jebkāda grafiska interfeisa vai sarežģītām procedūrām.

Turklāt cron ir pieejams praktiski jebkurā Unix līdzīgā sistēmā, tāpēc tas, ko apgūstat ar cron, ir noderīgs daudzās dažādās vidēs , sākot no lēta VPS līdz korporatīvajam serverim.

Linux cron arhitektūra: dēmons, crontabs un īpašas direktorijas

Lai efektīvi izmantotu cron, ir noderīgi izprast tā iekšējo struktūru. Vispārīgi runājot, sistēma balstās uz crond dēmonu, crontab failiem un vairākām īpašām direktorijām, kuras pārvalda sistēma.

Cron dēmons sākas ar sistēmu (parasti, izmantojot systemd vai atbilstošo init) un paliek nomodā, katru minūti pārbaudot, vai ir nepieciešami uzdevumi . Kad tas atrod rindu, kas atbilst pašreizējai minūtei, tas palaiž saistīto komandu jaunā čaulas procesā.

Katram sistēmas lietotājam var būt savs plānošanas fails, kas pazīstams kā crontab. Lietotāja crontab faili parasti tiek glabāti tādos ceļos kā /var/spool/cron/ vai /var/spool/cron/crontabs/ atkarībā no izplatīšanas. Ir svarīgi tos nerediģēt manuāli, bet gan izmantojot komandu `crontab` , kas validē sintaksi un paziņo cron dēmonam par visām izmaiņām.

Papildus lietotāju crontab failiem pastāv arī sistēmas mēroga cron mehānismi : fails /etc/crontab, direktorijs /etc/cron.d/ un periodiskās direktorijas /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly un /etc/cron.monthly. Šīs pēdējās direktorijas satur skriptus, kurus sistēma periodiski palaiž, izmantojot tādus rīkus kā anacron vai run-parts utilītas.

Vispārējā ideja ir tāda, ka cron dēmons barojas no šiem failiem un direktorijiem , katru minūti pārbaudot, vai kaut kas ir jāizpilda. Šī modulārā arhitektūra atvieglo sistēmas pakotnēm savu uzdevumu instalēšanu, neietekmējot globālo konfigurāciju.

crontab sintakse: pieci lauki un to operatori

Viena no lietām, ko jūs visvairāk atcerēsities, sākot lietot cron, ir tā rindu sintakse. Katrs ieraksts lietotāja crontab failā sastāv no pieciem laika laukiem un izpildāmās komandas . Lai gan mēs neatveidosim tabulu burtiski, standarta lauki ir minūte, stunda, mēneša diena, mēnesis un nedēļas diena.

Katrā laukā var ievadīt skaitliskas vērtības, diapazonus, ar komatiem atdalītus sarakstus, soļus ar slīpsvītru un pat tipisko zvaigznīti, lai norādītu "visas iespējamās vērtības". Pateicoties šiem operatoriem, var izteikt sarežģītus modeļus, nerakstot divdesmit dažādas rindas.

Turklāt daudzas cron implementācijas akceptē īpašus saīsnes taustiņus, piemēram, @daily, @hourly, @weekly, @monthly, @reboot un līdzīgus. Šie aizstājvārdi vienkāršo bieži veicamos uzdevumus, tāpēc jums pat nav jāatceras lauku secība.

Strādājot ar failu /etc/crontab vai /etc/cron.d/, tiek pievienots sestais lauks, lai norādītu lietotāju, ar kura starpniecību uzdevums tiks izpildīts . Tas ir ļoti svarīgi sistēmas uzdevumiem, kas jāizpilda kā root vai citiem pakalpojumu kontiem.

Šīs sintakses iegaumēšana un dažu reālās pasaules piemēru praktizēšana ir tas, kas atšķir neveiklu cron lietošanu no tīras, lasāmas un viegli uzturējamas automatizācijas laika gaitā.

Profesionāla crontab pārvaldība: rediģēšana, uzskaitīšana un versiju veidošana

Crontab komanda ir oficiālā saskarne darbam ar lietotāja ieplānotajiem uzdevumiem. Ar tās palīdzību var izveidot, rediģēt, uzskaitīt un pat dzēst crontab, un, pats galvenais, izvairīties no tiešas iekšējo sistēmas failu modificēšanas , kas samazina kļūdas un atļauju problēmas.

Ļoti ieteicama prakse nopietnās vidēs ir saglabāt crontab saturu versiju teksta failos, izmantojot Git . Tādā veidā jūs varat pārskatīt, kas ko un kad mainīja, salīdzināt vecākas versijas un ātri atjaunot iepriekšējo konfigurāciju, ja pēc modifikācijas kaut kas sabojājas.

Ir iespējams arī instalēt crontab no ārēja faila, kas ļoti labi darbojas ar automatizētām izvietošanas procedūrām vai infrastruktūru kā kodu . Tādā veidā, tā vietā, lai manuāli rediģētu katru serveri, jūs nosūtāt vienu un to pašu failu uz visiem serveriem un vienādi piemērojat izmaiņas.

Praksē pieredzējuši administratori parasti dokumentē katru rindiņu ar iepriekšēju komentāru, grupē saistītos uzdevumus un ievēro skaidru nosaukumu piešķiršanas konvenciju un ceļus cron izmantotajiem skriptiem . Šī disciplīna ievērojami atvieglo dzīvi vairākus mēnešus vēlāk.

  Hibernācija GNU Linux vidē: pilnīga un praktiska rokasgrāmata

Bieži sastopami automatizētu uzdevumu piemēri ar cron

Lai izprastu cron potenciālu, vienkārši pārskatiet tipiskos lietošanas gadījumus. Viens no biežākajiem ir regulāra sistēmas apkope : žurnālu rotēšana un saspiešana, pagaidu failu tīrīšana, meklēšanas indeksu atjaunošana vai veco dublējumu dzēšana.

Vēl viens ļoti izplatīts bloks ir uzdevumu uzraudzība . Ir samērā bieži palaist skriptus, kas pārbauda diska izmantošanu, sistēmas slodzi, noteiktu pakalpojumu veselību vai atmiņas patēriņu, un, ja tie konstatē bīstamu slieksni, tie ģenerē žurnālu, nosūta e-pastu vai aktivizē brīdinājumu ārējai sistēmai.

Arī izstrādes un datubāzu jomā cron ir liels potenciāls. Piemēram, ieplānotie uzdevumi tiek izmantoti, lai dublētu datubāzes, palaistu skriptus, kas atjauno metriku vai eksportē pārskatus CSV failos , vai pat lai vadītu nelielus datu apstrādes procesus.

To visu gandrīz vienmēr atbalsta Bash skripti vai citas valodas, kas veic faktisko darbu, savukārt cron rūpējas par "kad". Šī pienākumu sadalīšana nodrošina tīru crontab un biznesa loģiku iekapsulētu atsevišķos failos.

Vides mainīgie programmā cron: klasisks kļūdu avots

Viena no visbiežāk pieļautajām kļūdām, ko cilvēki pieļauj, sākot darbu ar cron, ir pieņēmums, ka uzdevumi darbojas tajā pašā vidē, kurā darbojas interaktīvais terminālis . Nekas nevarētu būt tālāk no patiesības: cron izpilda komandas ļoti ierobežotā kontekstā, ar ierobežotu ceļu (PATH) un bez jūsu čaulas pielāgojumiem.

Tas nozīmē, ka daudzi skripti, kas manuāli palaižot darbojas nevainojami, neizdodas darboties zem cron, jo tie nevar atrast bināros failus, nevar noteikt relatīvos ceļus vai ir atkarīgi no vides mainīgajiem, kas neeksistē . Risinājums ir vienkāršs: skaidri definējiet PATH un visus citus nepieciešamos mainīgos pašā crontab vai skriptā.

E-pasta darbību bieži kontrolē, izmantojot mainīgo `MAILTO` , lai uzdevumu standarta izvade tiktu nosūtīta uz lietotāja pastkasti vai atmesta. Vidēs, kurās e-pasta sistēma nav konfigurēta, ieteicams novirzīt izvadi uz failiem `/dev/null`, lai novērstu klusu uzkrāšanos.

Rezumējot, izstrādājot cron darbus, jādomā, ka tie darbojas sava veida "minimālisma vidē" un ka viss, kas nepieciešams jūsu skriptam, ir jādeklarē skaidri.

/etc/crontab, /etc/cron.dy ir periodiskas direktorijas

Papildus atsevišķiem crontab failiem Linux piedāvā sistēmas crontab failu, kas parasti atrodas /etc/crontab . Šis fails atšķiras no lietotāja crontab failiem ar to, ka tajā ir iekļauts papildu lauks konta norādīšanai, kurā komanda tiks izpildīta, kas ir svarīgi globāliem uzdevumiem.

Šis fails parasti definē, cita starpā, skriptu izpildi failos /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly un /etc/cron.monthly . Daudzās sistēmās šī izpilde ir deleģēta tādiem rīkiem kā anacron, kas nodrošina, ka uzdevumi tiek izpildīti pat tad, ja dators nav ieslēgts konkrētajā laikā.

/etc/cron.d/ direktorijā ir papildu crontab faili, kurus parasti instalē sistēmas pakotnes vai ārēji rīki. Katrs fails atbilst tādam pašam formātam kā /etc/crontab, ieskaitot lietotāja lauku. Šis ir ieteicamais veids, kā pievienot sistēmas uzdevumus, nemainot galveno crontab , uzlabojot uzturēšanu un novēršot konfliktus atjauninājumu laikā.

Tipiskā darbplūsma ir tāda, ka cron dēmons periodiski pārbauda šos failus un kopā ar anacron vai run-parts atbilstošā laikā aktivizē attiecīgajos direktorijos esošos skriptus . Jums kā administratoram vienkārši jānodrošina, lai jūsu skripti būtu pareizi sagatavoti un ievietoti pareizajā vietā.

Anacron: kad aprīkojums ne vienmēr ir ieslēgts

Zināms cron ierobežojums ir tāds, ka, ja dators tiek izslēgts, kad uzdevuma izpilde ir ieplānota, šis uzdevums tiek zaudēts. Anacron tika izveidots tieši tāpēc, lai aizpildītu šo robu , īpaši datoros, kas nedarbojas visu diennakti, piemēram, klēpjdatoros vai biroja galddatoros.

Anacron tik daudz nepaļaujas uz precīzu datumu un laiku, bet gan uz dienu skaitu, kas pagājis kopš uzdevuma pēdējās izpildes. Kad sistēma startē, tā pārbauda, ​​kuri ikdienas, nedēļas vai mēneša uzdevumi ir izlaisti , un pārplāno tos, lai tie tiktu izpildīti ar nelielu, konfigurējamu aizkavi.

Šis aizkaves lauks minūtēs ir svarīgs, jo tas neļauj visiem nepabeigtajiem uzdevumiem palaisties vienlaicīgi startēšanas laikā , kas varētu pārslogot sistēmu. Tā vietā tie ir pakāpeniski izvietoti, ļaujot datoram startēties pakāpeniskāk.

Daudzās mūsdienu sistēmās, ja ir pieejams anacron, tas ir atbildīgs par skriptiem failos /etc/cron.daily, /etc/cron.weekly un /etc/cron.monthly, savukārt cron apstrādā detalizētākus, biežāk veicamus uzdevumus. Šī kombinācija padara automatizāciju noturīgu pat uz bieži izslēgtām iekārtām.

Komanda "at": vienreizēja izpilde nākotnē

Lai gan cron un anacron koncentrējas uz atkārtotiem uzdevumiem, komanda at aptver ļoti vienkāršu un noderīgu gadījumu: komandas ieplānošanu, lai tā darbotos tikai vienu reizi noteiktā laikā nākotnē. Tas ir līdzīgi kā atstāt sistēmā piezīmi, lai kaut kas tiktu darīts "rīt plkst. 9:30" vai "pēc 2 stundām".

`at` sintakse ir diezgan lietotājam draudzīga un ļauj izmantot dabiskas laika izteiksmes. Kad uzdevums ir definēts, sistēma to saglabā rindā un izpilda plānotajā laikā . Pēc tam uzdevums pazūd, atšķirībā no `cron`, kas saglabā uzdevumu, līdz to modificējat vai izdzēšat.

Šis rīks ir īpaši ērts vienreizējiem uzdevumiem, kurus nevēlaties aizmirst, bet kuriem nav jēgas atkārtotiem uzdevumiem : plānotai restartēšanai, apkopes darbiem pēc darba loga vai testiem, kas jāsāk noteiktā laikā.

Apvienojumā ar labiem skriptiem `at` kļūst par elegantu aizstājējzīmi, par kuras eksistenci daudzi lietotāji aizmirst, bet kas var ievērojami vienkāršot ikdienas uzdevumus, ja jauna cron ieraksta izveide nav tā vērta.

systemd taimeri: moderna alternatīva cron

Mūsdienu izplatījumos, kas izmanto systemd (Ubuntu, Debian, Fedora, CentOS un daudzi citi), ir vēl viens veids, kā plānot uzdevumus: systemd taimeri . Tā vietā, lai paļautos uz crontab failiem, šeit jūs definējat pakalpojumu vienības (.service) un taimera vienības (.timer), kuras systemd pārvalda tāpat kā citus pakalpojumus.

Systemd taimeri izceļas ar to, ka tie nemanāmi integrējas ar pārējo systemd ekosistēmu : jūs varat skatīt stāvokli, žurnālus un atkarības, izmantojot tos pašus pazīstamos rīkus (journalctl, systemctl utt.). Tas ir ideāli piemērots sarežģītiem darbiem, kuriem jāsākas pēc citiem pakalpojumiem, jāievieš restartēšanas politikas vai jāuztur detalizēti žurnāli.

Tipisks taimeris sastāv no servisa faila, kas definē, kas tiek izpildīts (skripts, binārais fails, konkrēta darbība), un taimera faila, kas norāda, kad un cik bieži tas tiek palaists. Systemd piedāvā elastīgas kalendāra izteiksmes un opcijas, piemēram, persistence , kas liek uzdevumam palaisties pēc izslēgšanas, ja tā tika nokavēta.

Izvēloties starp cron un systemd taimeriem, labs īkšķa noteikums ir sev pajautāt, vai jums ir nepieciešama iebūvēta reģistrēšana, pakalpojumu atkarības vai uzlabota noturība . Ja atbilde ir "jā", taimeris parasti ir labāks. Vienkāršiem, universāliem uzdevumiem cron joprojām ir pieredzējusi un pilnīgi derīga izvēle.

  Debian izlaidums ar drošības un kļūdu labojumiem

Galu galā starp abām pieejām nav konflikta: vienkāršiem uzdevumiem var izmantot cron, bet sarežģītiem uzdevumiem — taimerus , bez jebkādām problēmām pastāvot līdzās vienā sistēmā.

Drošība un piekļuves kontrole programmā Cron

Tā kā cron var izpildīt praktiski jebkuru komandu ar atbilstošām lietotāja atļaujām, drošība ir būtisks jautājums. Linux ietver drošības mehānismus, kuru pamatā ir /etc/cron.allow un /etc/cron.deny faili , kas nosaka, kuri lietotāji var izmantot cron.

Atkarībā no konfigurācijas sistēma var atļaut cron uzdevumus tikai tiem, kas ir baltajā sarakstā, vai arī skaidri liegt tos tiem, kas ir melnajā sarakstā. Pareiza šo failu pārvaldība ir ļoti svarīga vairāku lietotāju vidēs vai neaizsargātos serveros , kur nav vēlams, lai kāds konts varētu piesātināt resursus ar slikti izstrādātiem uzdevumiem.

Turklāt ieteicams ierobežot, kuri skripti tiek palaisti kā root lietotājs, un rūpīgi pārskatīt jebkura ieplānotā uzdevuma kodu ar augstām privilēģijām. Vienkārša kļūda cron skriptā ar administratora privilēģijām var radīt ļoti nopietnu drošības ievainojamību.

Sarežģītākos kontekstos tādi rīki kā SELinux vai AppArmor var pievienot papildu kontroles slāņus pār to, ko var darīt cron palaistie procesi, vēl vairāk nostiprinot sistēmas drošības stāvokli.

Cron uzdevumu atkļūdošana: metodoloģija un tipiskās kļūdas

Ja ieplānotais uzdevums nedara to, ko jūs sagaidāt, labākā stratēģija nav bezmērķīgi eksperimentēt, bet gan sekot vienkāršai diagnostikas metodoloģijai . Pirmais solis ir pārbaudīt, vai cron dēmons patiešām ir aktīvs un iespējots, izmantojot izplatīšanas servisa rīkus.

Pēc tam jums vajadzētu pārskatīt sistēmas žurnālus un visus ar cron saistītos žurnālus. Bieži vien crontab var atrast sintakses kļūdas, atļauju problēmas vai skriptu izpildes kļūmes, kas nebija uzreiz pamanāmas.

Nākamais loģiskais solis ir manuāli palaist skriptu vai komandu, ko cron mēģina palaist, bet pēc iespējas labāk simulējot cron vidi : tas pats lietotājs, tie paši ceļi, nepaļaujoties uz interaktīvās čaulas aizstājvārdiem vai funkcijām.

Starp visbiežāk pieļautajām kļūdām ir: standarta un kļūdu izvades pāradresācijas aizmirsšana, relatīvo ceļu izmantošana, kuriem nav jēgas, kad cron palaiž skriptu, pieņēmums, ka PATH ietver direktorijus, kuru patiesībā nav, vai neņemšana vērā, ka vairāki viena un tā paša uzdevuma gadījumi var pārklāties laikā.

Šo problēmu novēršana ietver visa skaidru definēšanu, absolūto ceļu izmantošanu, atkļūdošanas žurnālu pievienošanu un, ja iespējams, uzdevumu aizsardzību pret vienlaicīgu izpildi.

Laba profesionālā prakse ar cron

Gadu gaitā sistēmu administratoru kopiena ir izstrādājusi virkni ieteikumu, kas nosaka atšķirību starp "četru nejauši iestatītu cron uzdevumu" un profesionālu automatizācijas pārvaldību.

Zelta likums ir vienmēr novirzīt katra uzdevuma izvadi uz žurnālfailu, oa /dev/null . Ja to nedarīsiet, cron mēģinās nosūtīt šo izvadi lietotājam pa e-pastu, kas var piepildīt root pastkastītes vai vienkārši pazust, ja e-pasta sistēma nav konfigurēta, tādējādi ievērojami apgrūtinot problēmu novēršanu.

Vēl viena svarīga prakse ir loģikas iepakošana atsevišķos skriptos, nevis garu komandu rakstīšana tieši crontab . Tas atvieglo skripta versiju veidošanu, manuālu testēšanu, dokumentēšanu un atkārtotu izmantošanu.

Lai izvairītos no pārklāšanās problēmām, tādi rīki kā flock ļauj ieviest vienkāršus bloķēšanas mehānismus: ja viens uzdevuma eksemplārs joprojām darbojas, nākamais vai nu gaida, vai pārtrauc darbību, neizpildot to. Tas ir ļoti svarīgi lieljaudas dublēšanas vai datu apstrādes uzdevumiem.

Visbeidzot, ieteicams katru crontab rindiņu komentēt ar skaidru aprakstu un nodrošināt faila versiju kontroli, izmantojot Git vai līdzīgas sistēmas . Laika gaitā (vai mainoties administratoram) šie komentāri un izmaiņu vēsture būs nenovērtējama.

Bash skriptēšana: dzinējs, kas darbina automatizācijas

Nekas no iepriekšminētā nederēs, ja mums nebūs nekā noderīga, ko palaist, un tieši te noder Bash skripti. Skripts ir vienkārši teksta fails ar komandām, kuras čaula izpilda vienu pēc otras , it kā jūs tās rakstītu pats, taču nenogurstot.

Vēsturiski čaulas skripti ir bijuši Unix automatizācijas pamatā kopš 70. gs. septiņdesmitajiem gadiem. Līdz ar Bash parādīšanos kā noklusējuma čaulu daudzās distribūcijās tika konsolidēta vienkārša, bet jaudīga skriptvaloda , kas ir ideāli piemērota sistēmas komponentu sasaistīšanai, failu apstrādei un ārējo programmu koordinēšanai.

Praktiskā līmenī tipisks Bash skripts sākas ar rindiņu #!/bin/bash , lai norādītu čaulu, kurai tas jāinterpretē, jādefinē mainīgie, jāizpilda komandas, jāizmanto nosacījumi un cikli, kā arī jāpievieno informatīvi ziņojumi ar atbalsi, lai mēs zinātu, kas notiek.

Ir ļoti vienkārši skripti, kas pārvieto tikai dažus failus, un citi, kas ir daudz sarežģītāki, kas veic pilnīgas dublējumkopijas, ģenerē atskaites un apvienojas ar cron vai at, lai regulāri darbotos automātiski.

Galvenais ir tas, ka jebkurš uzdevums, kas terminālī tiek atkārtots pārāk bieži, ir ideāls kandidāts, lai kļūtu par skriptu, tādējādi vidējā termiņā ietaupot laiku un izvairoties no muļķīgām kļūdām.

Praktisks piemērs: ikdienas dublēšana ar Bash un cron

Ļoti izplatīta situācija ir vēlme izveidot ikdienas dublējumu konkrētai svarīgai mapei . Izmantojot Bash, to var paveikt tikai dažās koda rindās, izveidojot direktoriju ar pašreizējo datumu un iekļaujot tajā attiecīgos datus.

Vispārējā loģika parasti ir apmēram šāda: ģenerēt virkni ar šodienas datumu, izveidot mērķa ceļu, kas to ietver, izveidot šo direktoriju, ja tāda neeksistē, rekursīvi kopēt svarīgos datus un visbeidzot parādīt ziņojumu, kas norāda, ka dublēšana ir veiksmīgi pabeigta.

Ja to apvienojat arī ar dublējuma šifrēšanu, tar/gz izmantošanu operētājsistēmā Linux vai drošu transportēšanu uz citu serveri, izmantojot VPN vai SSH tuneļus, varat izveidot pienācīgu dublējuma stratēģiju bez lielām komplikācijām , paļaujoties tikai uz klasiskajiem Linux rīkiem.

Šo skriptu var saglabāt direktorijā, piemēram, /usr/local/sbin, vai skriptu mapē un piešķirt tam izpildes atļaujas. Pēc tam izmantojiet cron, lai ieplānotu tā automātisko izpildi laikā, kad serverim ir maza slodze , piemēram, katru nakti pusnaktī.

Ja to apvienojat arī ar dublējuma šifrēšanu vai drošu pārsūtīšanu uz citu serveri, izmantojot VPN vai SSH tuneļus, varat izveidot pienācīgu dublējuma stratēģiju bez lielām komplikācijām , paļaujoties tikai uz klasiskajiem Linux rīkiem.

Pamata automatizācija ar Bash skriptiem: pirmie soļi

Ja jūs tikai sākat strādāt ar skriptiem, gudrākais risinājums ir rīkoties soli pa solim. Vispirms izveidojiet tukšu failu, rediģējiet to ar savu iecienītāko redaktoru, pievienojiet dažas koda rindiņas , saglabājiet to, piešķiriet tam izpildes atļaujas un pārbaudiet to.

Pirmie vingrinājumi parasti ietver vienkāršu uzdevumu automatizāciju, piemēram, failu saraksta veidošanu, to pārvietošanu uz noteiktām mapēm vai pagaidu direktoriju tīrīšanu . Tas palīdz iepazīties ar sintaksi, mainīgajiem, atļaujām un izvades ziņojumiem.

Vēlāk varat apsvērt skriptus, kas ik pa laikam ieraksta datumu un laiku žurnālā, naktī veido saspiestas /etc/ kopijas vai pārbauda diska vietu un nosūta brīdinājumu, kad tiek pārsniegts noteikts noslodzes procents.

  Docker Swarm un Portainer Edge perifērijas izvietošanai

Ļoti laba prakse ir izmantot `echo` kā atkļūdošanas rīku , lai skripts izdrukātu, kuru soli tas izpilda, galveno mainīgo vērtības un to, vai ir radušās kādas problēmas. Tas ievērojami vienkāršo loģisko kļūdu atrašanu.

Ar praksi jūs galu galā izveidosiet nelielu "personīgo bibliotēku" ar skriptiem, kas kļūs par jūsu klusajiem asistentiem, gataviem darboties paši, pateicoties cron, at vai systemd taimeriem.

Automatizācija un drošība: Linux servera stiprināšana

Gandrīz katru reizi, kad tiek apspriesta automatizācija nopietnos serveros, saruna neizbēgami pievēršas drošībai. Linux servera stiprināšana ietver tā uzbrukuma virsmas samazināšanu, labākās prakses ieviešanu un drošības kontroles automatizāciju, lai tā nebūtu atkarīga no manuālas atsaukšanas.

Pirmais svarīgais solis ir lietotāju kontu pārvaldība . Ieteicams izvairīties no vispārīgiem vai acīmredzamiem lietotājvārdiem (piemēram, "admin" vai "oracle"), izmantot mazāk paredzamus vārdus, izveidot spēcīgas paroļu politikas ar periodisku derīguma termiņu un pielāgot UID diapazonus, lai tos nebūtu viegli uzminēt.

Vēl viena problēma ir instalētās pakotnes. Jo vairāk nevajadzīgas programmatūras jums ir, jo lielāka kļūst jūsu uzbrukuma virsma. Tāpēc ir ieteicams uzskaitīt instalētās pakotnes, noņemt neizmantotās un uzraudzīt atkarības, lai izvairītos no nejaušas kritisku pakalpojumu darbības pārtraukšanas.

Jums vajadzētu arī pārbaudīt darbojošos pakalpojumus, izmantojot tādus rīkus kā systemctl, apturēt un atspējot tos, kas neko nedod, un pārbaudīt klausīšanās portus ar tādiem utilītprogrammām kā netstat vai ss, lai pārliecinātos, ka ir atvērti tikai absolūti nepieciešamie.

Ja pievienojam labu SSH aizsardzību (tiešas root pieteikšanās atspējošana, atslēgas autentifikācijas izmantošana, taimautu pielāgošana) un tādu ugunsmūru kā firewalld vai iptables izmantošana, mēs iegūstam vairākus aizsardzības slāņus pret ārējiem uzbrukumiem bez pārāk lielām sarežģījumiem.

SELinux, ugunsmūri un optimizācija ar noregulētu

Vidēs, kur drošība ir prioritāte, tādi rīki kā SELinux sacietēšana darbojas kā papildu obligātās piekļuves kontroles šķērslis, ierobežojot, kuri procesi var darīt ko, pārsniedzot tradicionālās atļaujas.

Ir svarīgi pārbaudīt SELinux statusu, vēlams konfigurējot to stingrās izpildes režīmā un pielāgojot politikas atbilstoši sistēmas vajadzībām, izmantojot īpašas utilītas. Lai gan sākumā tas var šķist biedējoši, pareizi konfigurēts tas bloķē daudzas nevēlamas darbības.

Tīkla vidē firewalld vai iptables ļauj definēt detalizētus noteikumus ienākošajai un izejošajai datplūsmai , atverot tikai konkrētus pakalpojumus, piemēram, SSH, HTTP vai jebkuru citu patiešām nepieciešamu. Tas ievērojami samazina potenciālo uzbrukumu vektoru skaitu.

No otras puses, ir tādi rīki kā Tuned, kas paredzēti sistēmas veiktspējas optimizēšanai , izmantojot iepriekš definētus profilus, pamatojoties uz darba slodzes veidu: serveris, darbvirsma, virtuālie viesi utt. Atbilstošā profila aktivizēšana un noteiktu parametru pārvaldība ļaujot Tuned ietaupīt laiku un uzlabot kopējo veiktspēju.

Tas viss ir bezjēdzīgi, ja tas tiek darīts tikai vienu reizi un pēc tam aizmirsts. Drošībai un veiktspējai nepieciešama nepārtraukta pārskatīšana, regulāri ielāpi un pastāvīga uzraudzība , un tieši šeit noder automatizācija: daudzus no šiem ikdienas uzdevumiem var ieplānot tā, lai tie darbotos automātiski.

Ansible: liela mēroga automatizācija un konfigurācijas pārvaldība

Kad serveri tiek mērogoti no viena vai diviem līdz desmitiem vai simtiem, cron un lokālie skripti nespēj nodrošināt konsekvenci. Ansible parādās kā automatizācijas un konfigurācijas pārvaldības rīks , kam nav nepieciešami aģenti mezglos un kas balstās uz SSH un lasāmiem YAML failiem.

Ar Ansible jūs definējat resursdatora inventarizācijas, ģenerējat SSH atslēgu pārus autentifikācijai bez paroles un automatizējat Linux sistēmas administrēšanu, rakstot rokasgrāmatas, kas apraksta vēlamo serveru stāvokli : kuras pakotnes jāinstalē, kuri pakalpojumi ir aktīvi, kuri konfigurācijas faili ir pieejami utt.

Liela priekšrocība ir tā, ka vienu un to pašu rokasgrāmatu var lietot daudzās sistēmās vienlaikus un iegūt konsekventu un atkārtojamu rezultātu , ko būtu ļoti grūti panākt, ja katrs administrators izmaiņas piemērotu manuāli. Turklāt Ansible ir idempotenta: vienas un tās pašas rokasgrāmatas vairākkārtēja palaišana neko nesabojā; tā vienkārši nodrošina, ka viss ir tā, kā tam jābūt.

Piemēram, vienkārša rokasgrāmata var apstrādāt tmux instalēšanu visos serveros "tīmekļa" grupā, izmantojot tikai dažas koda rindiņas. Pēc tam var veidot sarežģītākas automatizācijas: lietojumprogrammu izvietošanu, masveida konfigurācijas izmaiņas, atslēgu rotāciju utt.

Drošības kontekstā Ansible ir ideāli piemērots drošības pastiprināšanas politiku piemērošanai, ugunsmūru konfigurēšanai, SSH regulēšanai vai audita skriptu izvietošanai visos mezglos centralizēti, novēršot kļūdas un novirzes.

Ikdienas automatizācija: piemēri un darba filozofija

Papildus konkrētajiem rīkiem pastāv arī domāšanas veids, kas attīstās laika gaitā: katru reizi, kad kaut ko manuāli atkārtojat pāris reizes, ir vērts sev pajautāt, vai to nevar automatizēt . Linux burtiski ir tam radīts.

Daži cilvēki termināli pat uzskata par klusu palīgu, kas fonā dara dažādas lietas jūsu vietā: plāno e-pasta atgādinājumus, ģenerē iknedēļas kopsavilkumus, sinhronizē direktorijus ar attāliem serveriem vai iztīra lejupielāžu un pagaidu mapes, jums pat nepakustinot ne pirkstu.

Pat bieži vien neievēroti rīki, piemēram, `at`, ļauj ieplānot vienreizēju palaišanu rītdien noteiktā laikā bez cron uzdevuma apgrūtinājumiem . Apvienojumā ar labi strukturētiem skriptiem šīs utilītas pārvērš jūsu Linux sistēmu par sava veida digitālu "trauku mazgājamo mašīnu", kas apstrādā atkārtotus uzdevumus.

Svarīgi ir pieiet automatizācijai ar veselo saprātu un saprātīgu pieeju : runa nav par automatizāciju tāpēc, ka tā ir modē, bet gan par to, lai novērtētu, kuri uzdevumi ir laikietilpīgi, pakļauti cilvēciskām kļūdām vai atstāj ietekmi, ja tie tiek aizmirsti, un vispirms noteiktu prioritātes šiem uzdevumiem.

Laika gaitā jūs galu galā rakstāt sev nelielus vingrinājumus: cron darbus, kas reģistrē datumu un laiku, lai pārbaudītu, vai esat pareizi konfigurējis sintakse, dublēšanas skriptus, uzraudzības skriptus un pat dažu šo uzdevumu konvertēšanu uz systemd taimeriem ar noturību un nejaušām aizkavēm, lai sadalītu slodzi.

Apvienojot visas šīs daļas — Bash skriptus, cron, anacron, at, systemd taimerus, Ansible, drošības paraugpraksi, ugunsmūrus un optimizācijas rīkus —, jūs galu galā izveidojat vidi, kurā Linux darbojas jūsu labā visu diennakti, uzturot dublējumkopijas, stiprinot drošību un rūpējoties par veiktspēju , kamēr jūs koncentrējaties uz mazāk mehāniskām un interesantākām problēmām.

Crontab Linux
Saistītais raksts:
Crontab Linux: ievads uzdevumu plānošanā