← Natrag
AI

Systemd oneshot jedinice: RuntimeMaxSec ignoriran, što ih ograničava

Damir Radulić· 7. listopada 2026.· 2 min čitanja· 1 pregleda
Systemd oneshot jedinice: RuntimeMaxSec ignoriran, što ih ograničava
🎧 Poslušaj članak

Kada upravljate servisima putem systemda, možda ste primijetili da RuntimeMaxSec ne funkcionira kako očekujete za Type=oneshot jedinice. Za razliku od trajnih servisa, oneshot jedinice se pokreću, obave posao i odmah završavaju. No, postoji ključni detalj: systemd mjeri vrijeme izvršavanja samo za jedinice koje uđu u stanje activating ili running. Oneshot jedinice često preskaču ta stanja ili se u njima zadržavaju prekratko, pa RuntimeMaxSec jednostavno ne stupa na snagu.

Zašto RuntimeMaxSec ne radi za oneshot jedinice?

Prema dokumentaciji systemda, RuntimeMaxSec postavlja maksimalno dopušteno vrijeme izvršavanja za servis. Međutim, taj se sat aktivira tek kada jedinica uđe u stanje activating (pokretanje) ili running (rad). Oneshot jedinice, po definiciji, izvršavaju se sinkrono i često završe prije nego što systemd uopće registrira da su u aktivnom stanju. Drugim riječima, one mogu trajati neograničeno dugo, a da ih RuntimeMaxSec ne prekine.

Ovo ponašanje može zbuniti administratora koji očekuje da će svaka jedinica biti ograničena. No, systemd je dizajniran tako da oneshot jedinice tretira drugačije – one su zamišljene za kratkotrajne zadatke, a ne za dugotrajne procese.

Što zapravo ograničava oneshot jedinice?

Iako RuntimeMaxSec ne pomaže, postoje drugi mehanizmi koji mogu ograničiti izvršavanje oneshot jedinica:

  • TimeoutStartSec: Ovo je glavni alat. Postavlja maksimalno vrijeme čekanja da se jedinica pokrene. Za oneshot jedinice, to uključuje vrijeme potrebno da se izvrši naredba. Ako se prekorači, systemd će prekinuti proces i označiti jedinicu kao neuspješnu.
  • TimeoutStopSec: Iako se češće koristi za zaustavljanje, može poslužiti i kao dodatna zaštita, ali nije primaran za oneshot.
  • WatchdogSec: Ako je konfiguriran, watchdog može prekinuti jedinicu ako ne primi signal, ali to zahtijeva suradnju samog procesa.
  • Ograničenja na razini procesa: Alati poput timeout ili ulimit unutar same naredbe mogu poslužiti kao dodatni sloj zaštite.

Dakle, ako želite ograničiti trajanje oneshot jedinice, TimeoutStartSec je opcija koju trebate koristiti. Ona se primjenjuje na cijelo pokretanje, uključujući izvršavanje naredbe.

Praktični primjer: oneshot jedinica s ograničenjem

Razmotrimo primjer oneshot jedinice koja izvršava dugotrajni backup. Bez ograničenja, može trajati satima. Dodajmo TimeoutStartSec:

[Unit]
Description=Backup baze podataka

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
TimeoutStartSec=30min

U ovom slučaju, ako backup potraje dulje od 30 minuta, systemd će ga prekinuti. Napomena: RuntimeMaxSec ovdje ne bi imao učinka.

Zaključak

Iako RuntimeMaxSec zvuči kao univerzalno rješenje za ograničavanje vremena izvršavanja, on ne djeluje na oneshot jedinice. Umjesto toga, koristite TimeoutStartSec ili druge mehanizme. Razumijevanje razlika između tipova jedinica ključno je za učinkovito upravljanje systemd servisima.

systemd oneshotRuntimeMaxSecTimeoutStartSeconeshot jedinicesystemd ograničenja

Zanima vas ovakva AI tehnologija?

RiNET gradi sovereign AI rjesenja za javni sektor i poduzeca - od civic intelligence do automatizacije nabave.

Kontaktirajte nas →
0 komentara

Komentari