systemd timers (systemctl list-timers) în Linux / Bash

Procese și monitorizare systemd (OnCalendar și list-timers din systemd 197+)

Programează sarcini repetate cu unități .timer în systemd, o alternativă la cron cu jurnal și dependențe.

Sintaxă comandă
systemctl list-timers [--all]
systemctl enable --now NUME.timer
systemd-analyze calendar "EXPRESIE"

Ce face systemd timers (systemctl list-timers)

Un timer systemd este o unitate .timer care pornește, la momentele stabilite, o unitate .service cu același nume. Serviciul conține comanda, iar timerul conține programul: OnCalendar= pentru date și ore (ca la cron) sau OnBootSec= / OnUnitActiveSec= pentru intervale relative.

Față de cron, ieșirea ajunge automat în jurnal (journalctl -u nume.service), serviciul are limitele și dependențele systemd, iar cu Persistent=true o execuție ratată (sistemul era oprit) se face la următoarea pornire.

systemctl list-timers arată când rulează data viitoare fiecare timer (NEXT, LEFT), când a rulat ultima dată (LAST, PASSED) și ce unitate pornește (ACTIVATES). Expresiile OnCalendar se verifică înainte cu systemd-analyze calendar.

Opțiuni și argumente

Opțiune / Parametru Descriere
OnCalendar= Program calendaristic: daily, weekly, *-*-* 03:00:00, Mon..Fri 08:30.
OnBootSec=, OnUnitActiveSec= Intervale relative: la N timp după pornire, respectiv după ultima activare.
Persistent=true Rulează la pornire execuțiile ratate cât timp sistemul a fost oprit.
RandomizedDelaySec= Adaugă o întârziere aleatorie, ca mai multe servere să nu pornească sarcina simultan.
list-timers --all Include și timerele încărcate, dar inactive.
enable --now NUME.timer Activează timerul la pornire și îl pornește imediat.

Exemple

Exemplul 1: Un backup zilnic: serviciul și timerul

Două fișiere în /etc/systemd/system/. Serviciul este de tip oneshot (rulează și se termină); timerul îl pornește în fiecare noapte la 02:30. Apoi reîncărcăm configurația și activăm timerul (nu serviciul).

# /etc/systemd/system/backup-site.service
[Unit]
Description=Backup zilnic pentru dexblog

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup_site.sh

# /etc/systemd/system/backup-site.timer
[Unit]
Description=Pornește backup-site.service în fiecare noapte

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

# comenzile de activare
sudo systemctl daemon-reload
sudo systemctl enable --now backup-site.timer

Ieșire în terminal

Created symlink '/etc/systemd/system/timers.target.wants/backup-site.timer' → '/etc/systemd/system/backup-site.timer'.

Exemplul 2: Lista timerelor active

Pe lângă timerul nostru apar timerele sistemului (de exemplu rotirea jurnalelor).

systemctl list-timers

Ieșire în terminal

NEXT                        LEFT     LAST                        PASSED  UNIT                    ACTIVATES
Mon 2026-10-26 00:00:00 EET 9h left  Sun 2026-10-25 00:00:01 EET 14h ago logrotate.timer         logrotate.service
Mon 2026-10-26 02:30:00 EET 12h left -                           -       backup-site.timer       backup-site.service
Mon 2026-10-26 06:41:12 EET 16h left Sun 2026-10-25 06:12:40 EET 8h ago  apt-daily-upgrade.timer apt-daily-upgrade.service

3 timers listed.
Pass --all to see loaded but inactive timers, too.

Exemplul 3: Verificarea unei expresii OnCalendar

systemd-analyze calendar arată forma normalizată și următoarea execuție, înainte să pui expresia în timer.

systemd-analyze calendar "Mon..Fri 08:30"

Ieșire în terminal

  Original form: Mon..Fri 08:30
Normalized form: Mon..Fri *-*-* 08:30:00
    Next elapse: Mon 2026-10-26 08:30:00 EET
       (in UTC): Mon 2026-10-26 06:30:00 UTC
       From now: 18h left

Greșeli frecvente

  • Activarea serviciului în loc de timer: systemctl enable backup-site.service nu programează nimic. Activezi backup-site.timer.
  • Uitarea lui systemctl daemon-reload după ce creezi sau modifici fișierele de unitate.
  • Nume diferite pentru .timer și .service fără Unit= în secțiunea [Timer]: implicit, timerul pornește serviciul cu același nume.

Comenzi înrudite

  • systemctl: Controlează sistemul de inițializare systemd și administrează serviciile (demoni de fundal).
  • journalctl: Interoghează și filtrează jurnalele centrale de sistem gestionate de serviciul systemd-journald.
  • at: Programează o comandă să ruleze o singură dată, la o oră anume, spre deosebire de cron, care repetă sarcinile.