−25%

la planurile Windows anuale, până pe 31 oct. Vezi planurile

EQVPS
Începe

Cum creezi un serviciu systemd ca o aplicație să ruleze mereu

Transformă orice script sau aplicație într-un serviciu administrat care pornește la boot, repornește dacă pică și scrie loguri în journalctl. Scrii un fișier de unitate, îl activezi și îi verifici starea — metoda standard de a rula ceva 24/7 pe Linux.

Să rulezi o aplicație cu & sau nohup merge până când serverul repornește, procesul pică sau vrei să-i găsești logurile — atunci totul se destramă. systemd e răspunsul standard: îți pornește aplicația la boot, o repornește dacă moare și îi capturează logurile. Să transformi un script sau un binar într-un serviciu administrat înseamnă un singur fișier mic.

1. Scrie un fișier de unitate

Creează /etc/systemd/system/myapp.service:

[Unit]
Description=My application
After=network.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Ajustează ExecStart, WorkingDirectory și User pentru aplicația ta. Restart=always e ce o ține în viață.

2. Creează un utilizator dedicat (recomandat)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

Rularea ca utilizator non-root limitează pagubele dacă aplicația e vreodată compromisă.

3. Activează-l și pornește-l

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

enable îl face să pornească la boot; --now îl pornește imediat.

4. Verifică starea și logurile

sudo systemctl status myapp
journalctl -u myapp -f       # follow live logs

Comenzi de zi cu zi

sudo systemctl restart myapp   # restart after a change
sudo systemctl stop myapp      # stop it
sudo systemctl disable myapp   # stop starting on boot

Avertismente cinstite

  • Rulează daemon-reload după ce editezi un fișier de unitate, altfel systemd folosește versiunea veche.
  • Fii atent la buclele de căderi. Dacă aplicația pică imediat, Restart=always reîncearcă la nesfârșit — RestartSec=5 distanțează încercările; repară eroarea de fond pe baza logurilor.
  • Preferă un User= non-root, ca o aplicație compromisă să nu dețină tot serverul.

Pașii următori

Un serviciu systemd e felul în care ții orice pornit 24/7 — de exemplu un agent AI care rulează non-stop sau releul din spatele unui server RustDesk găzduit de tine. Dacă aplicația ta e în container, --restart unless-stopped din Docker are același rol — vezi cum instalezi Docker.

Întrebări frecvente

De ce systemd și nu pur și simplu aplicația rulată în fundal?

Un proces trimis în fundal (cu & sau nohup) moare la repornire, nu revine dacă pică și își împrăștie logurile. Un serviciu systemd pornește automat la boot, repornește după o eroare și își trimite ieșirea în journalctl. E metoda standard și fiabilă de a rula ceva de lungă durată pe Linux.

Unde se pun fișierele de unitate?

Serviciile tale merg în /etc/systemd/system/, câte un fișier pe serviciu, cu numele ceva.service. După ce creezi sau editezi unul, rulează 'systemctl daemon-reload' ca systemd să preia schimbarea, apoi activează-l și pornește-l.

Ce face 'Restart=always' și are dezavantaje?

Îi spune lui systemd să repornească serviciul de fiecare dată când se oprește, din orice motiv — cheia ca ceva să ruleze mereu. Singura capcană e bucla de căderi: dacă aplicația pică imediat la pornire, systemd o tot repornește. Adaugă 'RestartSec=5' ca să distanțezi încercările și verifică logurile ca să repari eroarea de fond.

Cum văd logurile serviciului?

Folosește 'journalctl -u serviciul-tău -f' ca să urmărești ieșirea în timp real sau fără -f ca să citești istoricul. systemd capturează automat stdout și stderr, deci nu trebuie să configurezi singur fișiere de log.

Ar trebui serviciul să ruleze ca root?

Mai bine nu. Creează un utilizator dedicat, non-root, și setează 'User=' în unitate, ca o compromitere a aplicației să nu predea toată mașina. Rulează ca root doar când serviciul chiar are nevoie.

Comentarii

Încă nu există comentarii. Fii primul.

Lasă un comentariu

Comentariile sunt moderate înainte să apară.