sistemski

Next Generation Cron with systemd Stvaranje mjerača vremena

Next Generation Cron with systemd Stvaranje mjerača vremena
Morate li planirati neki zadatak u budućnosti na računalu? Ovo može izgledati jednostavno - uostalom, vaša perilica posuđa može pričekati prije pokretanja uz pomoć gumba - ali ponekad računala obavljaju tako jednostavne zadatke tako teško.Ali ako imate neke pozadine, vjerojatno ste čuli za to cron, ovaj softver potpuno posvećen pokretanju pravog zadatka u pravo vrijeme. Ali ovaj je alat stvarno dizajniran s jednostavnošću na umu i na kraju ćete možda imati loša iznenađenja.Ako ste ikada uspjeli zakazati zadatak u sustavu Windows, koristili ste Windows planer zadataka. Po defaultu ima GUI, ali ga ne čini tako jednostavnim za upotrebu: ova dva sustava samo pokreću postupak u određeno vrijeme i datum.

Da bih razumio koliko vam systemd može biti od pomoći tamo, uzet ću primjer.

Kakve će vas zamke sistemski mjerači vremena izbjeći?

Ako ikada posjedujete stroj s podacima do kojih vam je stalo, morat ćete kopiju podataka imati na drugom, vjerojatno sigurnijem mjestu. Ako upravljate poslužiteljem, obavezno je: na kraju krajeva, kako ćete se oporaviti ako vam tvrdi disk ne uspije i spriječiti obnavljanje podataka?

Dakle, kao odgovorna osoba sigurnosnu kopiju postavljate svaki tjedan ili svaki dan. Možete ga postaviti pomoću cron-a, planirate ga u 04:24, ali ovdje započinje problem: što ako je vaš poslužitelj iz bilo kojeg razloga isključen iz 04:10 u 04:30?

Pa vjerojatno je da će cron samo preskočiti tu sigurnosnu kopiju. To bi moglo biti kritično ako se to događa često i tiho ili ako se vaš kôd oslanja na činjenicu da se izvodi i možda ne uspije u suprotnom. Općenito se to događa kada postavite zadatak čišćenja putem crona i on se ne pokrene. Odjednom vaš kôd možda nema dovoljno prostora za nastavak i pokrenut će se - to je tužna, tako tužna situacija, zar ne, g. Elton John.

Međutim, ako propušteno pokretanje može predstavljati problem, zamislite jednu sekundu - vau, John Lennon sada? - da je vaš zadatak prespor. Ako je vaš zadatak postavljen da se izvodi svakih 10 minuta, ali mu treba 15 minuta, cron ili Windows će sa zadovoljstvom pokrenuti još jedan zadatak, čak i ako trenutni zadatak još nije nestao - i tako ćete istovremeno imati dva primjerka zadatka , koje je savršen recept za katastrofa. Kada se program istodobno izvodi, a nije dizajniran za to, doista će vjerojatno oštetiti datoteke, ostale softvere i baze podataka - i vaš poslužitelj odjednom postaje brod koji tone poput Titanica.

OK, možda idem predaleko s Titanicom, ali shvaćate. Iako systemd nije mogao učiniti puno za spas ovog broda, on vam može pomoći u rješavanju svih ovih nedostataka i osigurati vam duži božićni odmor zahvaljujući greškama koje će vam izbjeći. Vrijeme je da se upoznate s postavljanjem sistemskih tajmera.

Kako zakazati automatsko sigurnosno kopiranje poslužitelja?

Prije svega, systemd timeri pokreću systemd uslugu, pa ćete prije planiranja zadatka prvo morati učiniti uslugu. Srećom, napisao sam vodič za stvaranje systemd usluge, na ovaj način će vas upoznati s načinom rada systemd. Trebali biste ga pročitati prije nego što nastavite. Osim ako ti točno znajte što radite, vaša datoteka usluge systemd bi trebala ne sadrže bilo koju postavku WantedBy =. Ako želite pokrenuti svoju uslugu u određeno vrijeme, vjerojatno je ne želite pokrenuti prilikom pokretanja.

Zahvaljujući systemd servisnom sustavu, nemoguće je da se više instanci vašeg zadatka izvodi pogreškom: ako se zadatak već izvodi, samo će preskočiti to pokretanje i ostaviti da trenutno izvršeni zadatak završi svoj posao.

Jednom kada sistemsku uslugu zakažete, stvorite datoteku s istim imenom datoteke kao i vaša usluga, osim što bi trebala završiti s .tajmer umjesto .servis. U našem primjeru automatizirane sigurnosne kopije, usluga bi bila automatizirana sigurnosna kopija.usluga i tajmer bi bili automatizirani-sigurnosna kopija.mjerač vremena. Obje datoteke trebaju biti u istom direktoriju. Kao što sam vam rekao u članku usluge systemd, preporučujem vam da te datoteke napišete na uobičajenom mjestu, kao što je vaš kućni direktorij, a zatim ih kopirate u mapu systemd nakon što završite s uređivanjem.

Pa, dopustite mi da vam pokažem kako izgleda naša datoteka s odbrojavanjem:

[Jedinica]
Opis = Zakažite sigurnosne kopije za vrijeme izvan vršnih sati
[Odbrojavanje]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Uporan = istinit
[Instalirati]
WantedBy = mjerači vremena.cilj

Slično kao u sistemskim uslugama, postoje 3 odjeljka. [Unit] ili [Install] rade potpuno isto kao što je objašnjeno u mom članku o uslugama systemd. Imajte na umu da je WantedBy = ovdje važan jer se tajmeri mogu pokrenuti ili zaustaviti, pa ako ne kažete systemd-u da pokrene tajmer tijekom pokretanja, to se nikada neće aktivirati. mjerači vremena.target je poseban sistemski cilj za mjerače vremena.

Sada, odjeljak [Timer]. U njemu ćete pronaći sve postavke povezane s vremenom kada bi se tajmer trebao aktivirati. Za našu automatiziranu izradu sigurnosnih kopija, rekao sam systemd-u da je pokreće između 03:00 i 05:00 u vremenskoj zoni poslužitelja. Točno vrijeme je slučajno svakog dana.

OnCalendar = postavlja timer povezan s vremenom vašeg poslužitelja (zidni sat), poput svake nedjelje u 13 sati. Ako ste ranije koristili cron, trebali biste biti stvarno upoznati s ovom sintaksom. Međutim, to ima neke dodatne prednosti.

Na primjer, ako želite da se nešto događa svaki sat, možete učiniti ovako:

OnCalendar = satno

i svakodnevno:

OnCalendar = svakodnevno

U stvari, podržava sve sljedeće vrijednosti:

  1. u minutu
  2. satno
  3. dnevno
  4. mjesečno
  5. tjedni
  6. godišnje
  7. tromjesečno
  8. polu godišnje

Međutim, postoji problem s ovim ključnim riječima: na primjer, svakodnevni okidači uvijek ponoć, što je često vrhunac u računalnim sustavima. Zbog toga se preporučuje korištenje RandomizedDelaySec = (njegova upotreba navedena je u nastavku). Svejedno, za sigurnosnu kopiju to nije dobra opcija: ponoć nije izvan vršnih sati, već je obrnuto. Stoga moramo preciznije postaviti kada želimo vidjeti pokretanje tog zadatka.

Ako želite veću kontrolu, možete napisati datum poput 2018-12-06 12:49:37. Pa ako ste toliko precizni, samo ćete jednom aktivirati tajmer. Da bi se ponavljao, bilo koji od ovih elemenata zamijenit ćete * zvjezdicom.

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

Kao što vidite gore, u našem primjeru sigurnosne kopije sav datumski dio je * - * - *, što znači da bi se trebao događati svakog dana u mjesecu svake godine. Sada ako to učinite:

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

Zatim se pokreće svakog 25. prosinca u 3 ujutro. Savršen sistemski mjerač vremena za Djeda Mraza - čak i ako sumnjam da će mu ikad zatrebati! Dakle, zvjezdica dodaje ponavljanje tamo gdje ste je stavili. Ako ga stavite u polje godina, to znači "svake godine" itd.

Napokon, možete dodati UTC na kraju retka da biste koristili UTC vrijeme umjesto lokalne vremenske zone. Na primjer, neke usluge resetiraju svoje API kvote u ponoć, ali kako bi izbjegle bilo kakvu pristranost u vremenskoj zoni koja koristi UTC. Dakle, za takve zadatke trebali biste učiniti:

OnCalendar = dnevni UTC

Ajmo sada riješiti još jedan problem: špice. systemd također ima postavku za borbu protiv toga.

RandomizedDelaySec = omogućuje odgodu zadatka slučajnim vremenskim razdobljem. Vrijednost je maksimalan broj sekundi koje će odbrojavanje odgoditi. To je posebno namijenjeno takvim slučajevima. Sjećate se da se u systemd svakodnevno uvijek pokreće u ponoć? Pa, tjedni se uvijek pokreću u ponedjeljak u ponoć, a godišnji u 1. ponedjeljka u ponoć, jedan od najgorih vrhova u godini sa svuda prekidima mreže. Sigurno ne želite da se to dogodi.

Dodavanjem odgode uklanjate taj problem: automatski će odgoditi vaš zadatak u nepoznato vrijeme. Slučajnost je ovdje važna jer je mnogo vjerojatnije da će biti čak i kad je slučajna, a ujednačeno opterećenje omogućuje bolju optimizaciju vaših zadataka.

Recimo da svoje zadatke trebate izvoditi oko 7 sati ujutro, ali ako želite dopustiti malo kašnjenje od maksimalno 15 minuta, učinili biste ovo:

RandomizedDelaySec = 900

To bi trebalo biti dovoljno za kašnjenja. Ponekad su čak i kašnjenja u milisekundama dovoljna da spriječe neželjene skokove.

Uporno = brine o propuštenim okidačima odbrojavanja. Što ako je vaš poslužitelj isključen tijekom noći? Pa, sigurnosna kopija se uopće ne bi aktivirala. Ako ga postavite na true, u takvim slučajevima Systemd ga može pokrenuti prilikom sljedećeg pokretanja. Na ovaj način znate na jedan ili drugi način, izvršiće se zadatak odbrojavanja. Njegova je upotreba jednostavna, samo učinite sljedeće:

Uporan = istinit

To, međutim, ima jedan nedostatak koji je ionako teško izbjeći: kad se propusti više zadataka iz različitih odbrojavača, svi će se pokrenuti pri pokretanju i usporiti pokretanje. Po mom mišljenju to je puno bolje nego ako se nikad ne pokrene i nakon svega što je normalno, najprikladniji trenutak za pokretanje tajmera je kad je zakazan, poslije će ionako vjerojatno biti neprikladan.

OnBootSec = zadnja je opcija koju ću vam pokazati (ali ne najmanje važna). To je ako želite pokrenuti odbrojavanje neko vrijeme nakon pokretanja, a ne na temelju kalendara. Na primjer, ako trebate prilikom pokretanja provjeriti je li poslužitelj pravilno pokrenut i radi li kako je predviđeno, možete napisati uslugu provjere i upotrijebiti tu postavku tajmera da biste je pokrenuli nakon što je sustav imao dovoljno vremena za pokretanje.

Recimo da sustavu trebaju 3 minute za pokretanje, a možete učiniti:

OnBootSec = 180

I unatoč imenu, također možete učiniti:

OnBootSec = 3 minute

Ako precizirate i OnBootSec = i OnCalendar =, pokrenut će uslugu kad god se dogodi bilo koji od ova dva događaja.

Dobro, sada je vrijeme da spremite datoteku, kopirate je u sistemsku mapu ako ste slijedili moj gornji savjet i testirate radi li tajmer ispravno.

Omogućite svoj novi timer i nadzor

Da biste testirali svoj novi timer, morate reći systemd da ste dodali novi timer, pa morate upisati ovu naredbu:

$ sudo systemctl daemon-reload

Sada će systemd uzeti u obzir vaš novi timer i dobro pogledati kada pokrenuti vaš zadatak. Kako je systemd uvijek pokrenut, ipak je to jedan od najboljih kandidata za upravljanje i izvođenje vaših planiranih zadataka.

Ipak, jedna stvar koju biste mogli smatrati protuintuitivnom: tajmer je prema zadanim postavkama onemogućen. Da biste je omogućili, trebate napraviti ovu naredbu:

$ sudo systemctl enable --now automatizirano sigurnosno kopiranje.mjerač vremena

Tada ćete vjerojatno htjeti vidjeti djeluje li vaš mjerač vremena kako se očekivalo. Dobre vijesti: systemd je čak ljubazan da vam naredba kaže kada je zadnji put pokrenut i kada je zakazano sljedeće pokretanje (osim ako je timer postavljen da radi samo pri pokretanju, jer systemd očito ne zna kada će se sustav ponovo pokrenuti). Evo te naredbe:

$ systemctl status automatizirano-sigurnosno kopiranje.mjerač vremena

Napokon, kada vam više ne treba tajmer, možete ga i onemogućiti:

$ sudo systemctl disable --now automatizirano kopiranje.mjerač vremena

Zaključak

Koristeći systemd timere, vaše upravljanje planiranim zadacima prešlo je na sljedeću razinu: iskreno, osobno smatram da bi planirani zadaci trebali biti takvi već godinama.

Oh, jedno malo iznenađenje za vas: svi systemd timeri prijavljeni su u dobro strukturirani sustav s filtriranjem, rotacijom dnevnika i slično. Stoga vas pozivam da vidite kako možete vidjeti zapisnike o planiranim zadacima!

WinMouse vam omogućuje prilagodbu i poboljšanje kretanja pokazivača miša na Windows računalu
Ako želite poboljšati zadane funkcije pokazivača miša, upotrijebite besplatni program WinMouse. Dodaje više značajki koje će vam pomoći da na najbolji...
Lijevi gumb miša ne radi u sustavu Windows 10
Ako s prijenosnim računalom ili stolnim računalom koristite namjenski miš, ali lijevi gumb miša ne radi u sustavu Windows 10/8/7 iz nekog razloga evo ...
Pokazivač skače ili se slučajno pomiče dok tipkate u sustavu Windows 10
Ako ustanovite da kursor miša sam skače ili se pomiče automatski, nasumično dok tipkate u Windows prijenosnom računalu ili računalu, neki od ovih prij...