systemd

Nākamās paaudzes krons ar systemd Taimera izveide

Nākamās paaudzes krons ar systemd Taimera izveide
Vai jums nākotnē jāplāno kāds uzdevums datorā? Tas var izskatīties vienkārši - galu galā jūsu trauku mazgājamā mašīna var gaidīt, pirms tā tiek palaista, izmantojot pogu, taču dažreiz datori veic tik vienkāršus uzdevumus tik grūti.Bet, ja jums ir zināma izcelsme, jūs, iespējams, esat dzirdējuši krons, šī programmatūra ir pilnībā veltīta pareizā uzdevuma uzsākšanai īstajā laikā. Bet šis rīks patiešām ir izstrādāts, domājot par vienkāršību, un jums galu galā var būt slikti pārsteigumi.Ja jums kādreiz ir izdevies ieplānot uzdevumu sistēmā Windows, esat izmantojis Windows uzdevumu plānotāju. Pēc noklusējuma tam ir GUI, taču tas nepadara to tik vienkārši lietojamu: šīs divas sistēmas vienkārši uzsāk procesu noteiktā laikā un datumā.

Lai saprastu, kā systemd var jums tur noderēt, ņemšu piemēru.

Kādas kļūmes jūs novērsīsit sistēmas taimeri?

Ja jums kādreiz pieder mašīna, kurā ir dati, kas jums rūp, jūs vēlaties, lai datu kopija būtu citā, iespējams, drošākā vietā. Ja pārvaldāt serveri, tas ir obligāti: galu galā, kā jūs atgūsieties, ja cietais disks neizdosies, un novērsīsit datu atkopšanu?

Tātad kā atbildīgā persona jūs iestatāt dublēšanu katru nedēļu vai katru dienu. Jūs varat to iestatīt, izmantojot cron, ieplānojat to plkst. 4:24, bet šeit sākas problēma: kā rīkoties, ja jūsu serveris kāda iemesla dēļ tiek izslēgts no pulksten 4:10 līdz 4:30?

Tas ir iespējams, ka cron vienkārši izlaidīs šo dublējumu. Tas var būt kritiski, ja tas notiek bieži un klusi vai ja kods ir atkarīgs no tā, ka tas darbojas, un citādi tas var neizdoties. Parasti tas notiek, kad jūs izveidojat tīrīšanas uzdevumu, izmantojot cron, un tas netiek palaists. Pēkšņi kodā var nebūt pietiekami daudz vietas, lai to turpinātu, un tas tiks salauzts - tā ir skumja, tik skumja situācija, tieši Eltona Džona kungs.

Tomēr, ja nokavēta palaišana var radīt problēmas, iedomājieties vienu sekundi - wow, Džons Lenons tagad? - ka jūsu uzdevums ir pārāk lēns. Ja jūsu uzdevums ir iestatīts izpildīt ik pēc 10 minūtēm, bet tas aizņem 15 minūtes, cron vai Windows ar prieku palaidīs citu uzdevumu, pat ja pašreizējais uzdevums vēl nav pagājis - un tāpēc jums būs 2 uzdevuma gadījumi, kas darbojas vienlaikus , kas ir ideāla recepte priekš katastrofa. Kad programma darbojas vienlaicīgi, kamēr tā nav paredzēta, tā, iespējams, sabojās failus, citas programmatūras, datu bāzes - un jūsu serveris pēkšņi kļūst par grimstošu kuģi, piemēram, Titāniks.

Labi, varbūt es eju pārāk tālu ar Titāniku, bet jums ir ideja. Kaut arī systemd nevarēja daudz paveikt, lai glābtu šo kuģi, tas var jums palīdzēt novērst visus šos trūkumus un nodrošināt ilgāku Ziemassvētku brīvdienas, pateicoties kļūdām, no kurām jūs izvairīsities. Ir pienācis laiks uzzināt, kā iestatīt sistēmas taimerus.

Kā ieplānot automātisko servera dublēšanu?

Pirmkārt, systemd taimeri aktivizē systemd pakalpojumu, tāpēc, pirms plānojat uzdevumu, vispirms tas būs jāpadara par pakalpojumu. Par laimi, es esmu uzrakstījis rokasgrāmatu, lai izveidotu systemd pakalpojumu, tādējādi tas jūs iepazīstinās ar systemd darba veidu. Pirms turpināt, jums to vajadzētu izlasīt. Ja vien jūs precīzi zināt, ko jūs darāt, vajadzētu būt jūsu systemd servisa failam satur jebkuru WantedBy = iestatījumu. Ja vēlaties sākt pakalpojumu noteiktā laikā, jūs, iespējams, nevēlaties to palaist sāknēšanas laikā.

Pateicoties systemd apkalpošanas sistēmai, nav iespējams kļūdaini palaist vairākus uzdevuma gadījumus: ja uzdevums jau darbojas, tas vienkārši izlaiž šo palaišanu un atstās pašreiz izpildāmo uzdevumu, lai pabeigtu darbu.

Kad jums ir ieplānots sistēmas pakalpojums, izveidojiet failu ar tādu pašu faila nosaukumu kā jūsu pakalpojums, izņemot to, ka tam vajadzētu beigties ar .taimeris, nevis .apkalpošana. Mūsu automātiskās dublēšanas piemērā pakalpojums būtu automātisks dublējums.Pakalpojums un taimeris būtu automātiska dublēšana.taimeris. Abiem failiem jābūt vienā direktorijā. Kā es jums teicu sistēmas systemd rakstā, es iesaku rakstīt šos failus parastā vietā, piemēram, mājas direktorijā, un pēc tam nokopējiet tos mapē systemd, kad esat pabeidzis labojumus.

Tātad, ļaujiet man parādīt, kā izskatās mūsu taimera fails:

[Vienība]
Apraksts = Ieplānojiet dublēšanu ārpus pīķa stundām
[Taimeris]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Noturīgs = patiess
[Uzstādīt]
WantedBy = taimeri.mērķis

Līdzīgi kā sistēmas pakalpojumos, šeit ir 3 sadaļas. [Vienība] vai [Instalēt] darbojas tieši tāpat kā paskaidrots manā sistēmas pakalpojumu rakstā. Lūdzu, ņemiet vērā, ka WantedBy = šeit ir svarīgs, jo taimerus var iedarbināt vai apturēt, tādēļ, ja jūs nesakāt sistēmai palaist taimeri sāknēšanas laikā, tas nekad neizraisīs. taimeri.target ir īpašs systemd mērķis taimeriem.

Tagad sadaļa [Taimeris]. Tās iekšpusē jūs atradīsit visus iestatījumus, kas saistīti ar taimera iedarbināšanas laiku. Mūsu automātiskajai dublēšanai es esmu teicis sistēmai palaist to starp 3 AM un 5 AM servera laika joslā. Precīzs laiks ir nejaušs katru dienu.

OnCalendar = iestata taimeri, kas saistīts ar jūsu servera laiku (pulksteni), piemēram, katru svētdienu plkst. Ja iepriekš esat lietojis cron, jums vajadzētu patiešām zināt šo sintaksi. Tomēr tam ir dažas papildu priekšrocības.

Piemēram, ja vēlaties, lai kaut kas notiktu katru stundu, varat rīkoties šādi:

OnCalendar = stundā

un katru dienu:

OnCalendar = katru dienu

Faktiski tas atbalsta visas šīs vērtības:

  1. precīzi
  2. katru stundu
  3. katru dienu
  4. katru mēnesi
  5. iknedēļas
  6. gadā
  7. reizi ceturksnī
  8. reizi pusgadā

Tomēr šiem atslēgvārdiem ir problēma: piemēram, ikdienas aktivizēšana vienmēr ir pusnakts, kas skaitļošanas sistēmās bieži ir pīķa stunda. Tāpēc ieteicams izmantot RandomizedDelaySec = (tā lietojums ir norādīts zemāk). Jebkurā gadījumā dublējumam tas nav labs risinājums: pusnakts nav pīķa stundā, tas ir tieši otrādi. Tāpēc mums ir jānosaka precīzāk, kad mēs vēlamies redzēt šo uzdevumu.

Ja vēlaties vairāk kontrolēt, varat uzrakstīt datumu, piemēram, 2018-12-06 12:49:37. Ja jūs esat tik specifisks, jūs vienreiz iedarbināsiet taimeri. Lai padarītu to atkārtotu, jūs aizstāsit kādu no šiem elementiem ar * zvaigznīti.

OnCalendar = * - * - * 03:00:00

Kā redzat iepriekš, mūsu dublējuma piemērā visa datuma daļa ir * - * - *, tas nozīmē, ka tai jānotiek katru gadu katru mēnesi katru gadu. Tagad, ja jūs darāt:

OnCalendar = * - 12-25 03:00:00

Tad tas notiek katru 25. decembri plkst. 3:00. Ideāls sistēmas taimeris Ziemassvētku vecītim - pat ja es šaubos, vai viņam tas kādreiz būs vajadzīgs! Tātad zvaigznīte pievieno atkārtošanos tur, kur jūs to ievietojat. Ja jūs to ievietojat gada laukā, tas nozīmē "katru gadu" utt.

Visbeidzot, rindas beigās varat pievienot UTC, lai vietējās laika joslas vietā izmantotu UTC laiku. Piemēram, daži pakalpojumi pusnaktī atiestata savas API kvotas, bet, lai izvairītos no laika joslu novirzēm, tas izmanto UTC. Tātad, veicot šādus uzdevumus, jūs darāt:

OnCalendar = dienas UTC

Tagad atrisināsim vēl vienu problēmu: sastrēguma stundas. systemd ir arī uzstādījums cīņai pret to.

RandomizedDelaySec = ļauj aizkavēt uzdevumu izlases veidā. Vērtība ir maksimālais sekunžu skaits, ko taimeris aizkavēs. Tas ir īpaši paredzēts šādiem gadījumiem. Jūs atceraties, ka sistēmā systemdiviss vienmēr sākas pusnaktī? Katru nedēļu vienmēr sākas pirmdienas pusnaktī un katru gadu - 1. janvāra pusnaktī, kas ir viena no sliktākajām virsotnēm gadā ar tīkla pārtraukumiem visur. Jūs noteikti nevēlaties, lai tas notiktu.

Pievienojot aizkavēšanos, jūs novēršat šo problēmu: tā automātiski aizkavēs jūsu uzdevumu nezināmā laikā. Nejaušība šeit ir svarīga, jo tā daudz biežāk ir pat tad, ja tā ir nejauša, un vienmērīga slodze ļauj labāk optimizēt savus uzdevumus.

Pieņemsim, ka jums no rīta ir jāpilda uzdevumi ap plkst. 7:00, bet jūs vēlaties atļaut nelielu līdz 15 minūšu aizkavēšanos:

RandomizedDelaySec = 900

Ar to vajadzētu pietikt kavēšanās gadījumā. Dažreiz pat milisekundes kavēšanās ir pietiekama, lai novērstu neparedzētus pīķus.

Pastāvīgs = rūpējas par nokavēto taimera iedarbināšanu. Ko darīt, ja jūsu serveris tiek izslēgts nakts laikā? Nu, rezerves nekad neizraisītu vispār. Iestatot to uz true, šādos gadījumos systemd var palaist to nākamajā sāknēšanas reizē. Tādā veidā, kā jūs vienā vai otrā veidā zināt, taimera uzdevums tiks izpildīts. Tā lietošana ir vienkārša, jūs to vienkārši darāt:

Noturīgs = patiess

Tam tomēr ir viens trūkums, no kura tik un tā ir ļoti grūti izvairīties: ja tiek izlaisti vairāki uzdevumi no dažādiem taimeriem, tie visi darbosies sāknēšanas laikā un palēninās šo sāknēšanu. Manuprāt, tas ir daudz labāk nekā tad, ja tas nekad nedarbojas, un galu galā tas ir normāli, vispiemērotākais laiks taimera palaišanai ir tad, kad tas ir ieplānots, pēc tam tas, iespējams, tik un tā būs nepiemērots.

OnBootSec = ir pēdējā iespēja, kuru es jums parādīšu (bet ne mazāk). Tas ir, ja vēlaties aktivizēt taimeri kādu laiku pēc sāknēšanas, nevis pamatojoties uz kalendāru. Piemēram, ja jums jāpārbauda startēšanas laikā, ja serveris ir palaists pareizi un darbojas kā paredzēts, varat uzrakstīt pārbaudes pakalpojumu un izmantot šo taimera iestatījumu, lai to aktivizētu pēc tam, kad sistēmai bija pietiekami daudz laika, lai sāktu.

Pieņemsim, ka sistēmai ir nepieciešamas 3 minūtes, lai sāknētu, jūs varētu darīt:

OnBootSec = 180

Neskatoties uz tā nosaukumu, jūs varat arī:

OnBootSec = 3 minūtes

Ja precizējat gan OnBootSec =, gan OnCalendar =, tas palaidīs pakalpojumu ikreiz, kad notiks kāds no šiem 2 notikumiem.

Labi, tagad ir pienācis laiks saglabāt failu, nokopēt to sistēmas mapē, ja izpildījāt manu iepriekš sniegto padomu, un pārbaudīt, vai taimeris darbojas pareizi.

Iespējojiet savu jauno taimeri un uzraudzību

Lai pārbaudītu jauno taimeri, jums jāpasaka systemd, ka esat pievienojis jaunu taimeri, tāpēc jums jāievada šī komanda:

$ sudo systemctl daemon-reload

Tagad systemd ņems vērā jūsu jauno taimeri un rūpīgi izpētīs, kad izpildīt uzdevumu. Tā kā systemd vienmēr darbojas, tas galu galā ir viens no labākajiem kandidātiem, kas vada un vada jūsu ieplānotos uzdevumus.

Viena lieta, kas jums varētu šķist pretrunīga: taimeris pēc noklusējuma ir atspējots. Lai to iespējotu, jums jādara šī komanda:

$ sudo systemctl iespējojiet tagad automātisko dublēšanu.taimeris

Tad jūs, iespējams, vēlēsities redzēt, vai jūsu taimeris darbojas kā paredzēts. Labas ziņas: systemd ir pat tik laipns, ka komandai ir paziņojums, kad tā tika palaista pēdējo reizi un kad ir plānota nākamā palaišana (izņemot gadījumus, ja taimeris ir iestatīts darboties tikai sāknēšanas laikā, jo systemd, protams, nezina, kad sistēma atkal tiks sākta). Lūk, šī komanda:

$ systemctl statusa automātiskā dublēšana.taimeris

Visbeidzot, kad taimeris vairs nav vajadzīgs, varat to arī atspējot:

$ sudo systemctl atspējot - tagad automātisko dublēšanu.taimeris

Secinājums

Izmantojot sistēmas taimerus, ieplānoto uzdevumu vadība ir nākamajā līmenī: godīgi sakot, es personīgi uzskatu, ka ieplānotajiem uzdevumiem jau šādā veidā jābūt.

Ak, viens mazs pārsteigums jums: visi sistēmas taimeri tiek reģistrēti labi strukturētā sistēmā ar filtrēšanu, žurnāla pagriešanu un tamlīdzīgi. Tāpēc es aicinu jūs redzēt, kā jūs varat redzēt žurnālus par plānotajiem uzdevumiem!

5 labākie ergonomiskie datoru peles izstrādājumi Linux
Vai ilgstoša datora lietošana izraisa sāpes plaukstas locītavā vai pirkstos? Vai jūs ciešat no stīvām locītavām un jums pastāvīgi ir jāspiež rokas? Va...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Izmantojot X-Mouse Button Control, atšķirīgi mainiet peles pogas atšķirīgai programmatūrai
Varbūt jums ir nepieciešams rīks, kas varētu mainīt peles vadību ar katru lietoto lietojumprogrammu. Ja tas tā ir, varat izmēģināt lietojumprogrammu a...