Terminal Linux

Cum să programați o sarcină fără Cron

Programarea unei sarcini/comenzi în Linux este un acronim pentru cron. Ori de câte ori avem nevoie să programăm o sarcină, apelăm la comanda cron.

Dar știați că puteți programa o sarcină la un moment ulterior fără cron?

Programarea sarcinilor utilizând bucla Sleep Loop

Rulați comanda (de exemplu: data) la fiecare 5 secunde și scrieți rezultatul într-un fișier (de exemplu: data.txt). Pentru a realiza acest scenariu, trebuie să rulați scriptul de mai jos, de timp one-liner, direct în terminal.

$ while true; do data >> data.txt ; sleep 5 ; done &

Analiza scriptului de mai sus, cu o singură linie:

  • while true – solicită scriptului să ruleze în timp ce condiția este adevărată, acționează ca o buclă care face comanda să fie executată din nou și din nou sau să fie executată într-o buclă.
  • do – execută ceea ce urmează, adică execută comanda sau setul de comenzi care se află înaintea instrucțiunii do.
  • data >> data.txt – aici, rezultatul comenzii data este scris într-un fișier data.txt. De asemenea, observați că am folosit >> și nu >.
  • >> – asigură faptul că fișierul (data.txt) nu este suprascris de fiecare dată când scriptul se execută. Acesta doar adaugă modificările. În timp ce > suprascrie fișierul din nou și din nou.
  • sleep 5 – cere shell-ului să păstreze o diferență de timp de 5 secunde înainte de a se executa din nou. Rețineți că timpul este întotdeauna măsurată în secunde. Să spunem că dacă doriți să executați comanda la fiecare 6 minute, ar trebui să folosiți (6*60) 360, într-o succesiune de sleep.
  • done – marchează sfârșitul unei bucle while.
  • & – pune întregul proces într-o buclă în fundal.

În mod similar, puteți executa orice script în același mod. Iată comanda pentru a apela un script după un anumit interval de timp (să zicem 100 de secunde), iar numele scriptului este nume_script.sh.

Merită menționat faptul că scriptul de mai sus trebuie să fie rulat în directorul în care se află scriptul care urmează să fie apelat, altfel trebuie să furnizați o cale completă (/home/$USER/…/nume_script.sh).

Sintaxa pentru apelarea scriptului la intervalul descris mai sus este:

while true; do /bin/sh nume_script.sh ; sleep 100 ; done &
Notă:
Linia de mai sus nu înlocuiește Cron, deoarece utilitarul Cron suportă o mulțime de opțiuni, în comparație cu acesta și este foarte flexibil și personalizabil.

Cu toate acestea, dacă dorim să rulăm anumite cazuri de testare sau bechmark-uri I/O, atunci comanda unică de mai sus va servi scopului.

Programarea sarcinilor cu temporizatoarele Systemd

În majoritatea distribuțiilor Linux moderne, Systemd este sistemul de init implicit și vine cu o funcționalitate de temporizare care vă permite să vă programați sarcinile.

În primul rând, creați un nou fișier de unitate de teporizare systemd cu extensia .timer, după cum se arată mai jos.

sudo nano /etc/systemd/system/myjob.timer

Adăugați următorul conținut la fișierul myjob.timer:

[Unit]
Description=My Job Timer

[Timer]
OnCalendar=*-*-* 00:00:00
# Replace the OnCalendar value with the desired schedule
# Înlocuiți valoarea OnCalendar cu programul dorit

[Install]
WantedBy=timers.target

Câmpul OnCalendar dintr-o unitate de temorizare systemd vă permite să specificați programul pentru activitatea dvs, utilizând un format specific.

  • Yearly: o dată pe an.
  • Monthly: în fiecare lună.
  • Weekly: săptămânal.
  • Daily: zilnic.
  • Hourly: din oră în oră.
  • Minutes: puteți specifica un anumit minut folosind formatul *:MM (de exemplu: *:15 pentru fiecare 15 minute) sau un innterval specific folosind MM-MM (de exemplu: 10-30 pentru fecare minut de la 10 la 30).

Iată câteva exemple pentru a ilustra formatul:

## Run every day at 3:00 AM ##
## Rulează în fiecare zi la ora 3:00 AM ##
OnCalendar=*-*-* 03:00:00

## Run every Monday and Friday at 10:00 AM ##
## Rulează în fiecare luni și vineri la ora 10:00 AM ##
OnCalendar=Mon,Fri *-*-* 10:00:00

## Run every 30 minutes: ##
## Rulează la fiecare 30 de minute: ##
OnCalendar=*-*-* *:0/30:00

Apoi, creați un fișier de unitate de serviciu corespunzător cu extensia .service în același director.

sudo nano /etc/systemd/system/myjob.service

Adăugați următorul conținut în fișierul myjob.service:

[Unit]
Description=My Job

[Service]
ExecStart=/path/to/your/job.sh
# Replace "/path/to/your/job.sh" with the actual command or script to execute
# Înlocuiți "/calea/câtre/fișierul/job.sh" cu comanda sau scriptul real de executat

[Install]
WantedBy=multi-user.target

Activați și porniți temorizatorul:

sudo systemctl enable myjob.timer
sudo systemctl start myjob.timer

Acest lucru vă va programa activitatea pentru a fi executată în funcție de temporizatorul specificat.

Programarea sarcinilor utilizând Anacron

Anacron este un programator de lucrări de bază pe timp care vă permite să programați periodic lucrări pe sisteme care nu sunt mereu pornite.

Este conceput pentru sistemele care nu au acces regulat la cron. Dacă anacron este instalat pe sistemul dvs., îl puteți utiliza pentru a vă programa activitatea.

Dacă nu este instalat, îl puteți instala cu ajutorul managerului de pachete.

sudo apt install anacron         [Debian / Ubuntu]
sudo yum install anacron         [RHEL / Fedora]
sudo emerge -a sys-apps/anacron  [Gentoo Linux]
sudo apk add anacron             [Alpine Linux]
sudo pacman -S anacron           [Arch Linux]
sudo zypper install anacron      [openSUSE] 

Creați un nou fișier de configurare (myjob.sh) pentru sarcina dvs. în directorul /etc/anacrontab.d/.

sudo nano /etc/anacrontab.d/myjob.sh

În fișierul de configurare, specificați detaliile sarcinii dumneavoastră.

# Run myjob.sh every day with a delay of 5 minutes
# Rulați myjob.sh în fiecare zi cu o întârziere de 5 minute
1 5 myjob /path/to/myjob.sh

Câmpurile din fișierul de configurare au următoarele semnificații:

  • Primul câmp este perioada de timp în care trebuie să fie executată sarcina: daily (zilnic), weekly (săptămânal), monthly (lunar) sau yearly (anual).
  • Al doilea câmp este timpul în minute pentru a întârzia executarea sarcinii după pornirea sistemului.
  • Al treilea câmp este numele sarcini, ca va fi utilizat pentru a crea fișiere jurnal.
  • Al patrulea câmp este comanda sau scriptul care urmează să fie executat.

Acum, Anacron va executa automat sarcina dvs. în conformitate cu programul specific.

ThinkRoot99

Numele meu este Cristian Moldovan și sunt utilizator de Linux de peste 10 ani.Am făcut parte din mai multe echipe open source din România: Fundația Ceata, Linux Mint România, Rogentos Linux Group. Între 2014 și 2018 am fost propietarul și editorul site-ului de știri despre linux, gnulinux.ro și actual proprietar al rootlinux.ro

View all posts by ThinkRoot99 →

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *