Ce face nohup
Când închizi terminalul sau se întrerupe conexiunea SSH, shell-ul trimite semnalul SIGHUP (hang up) proceselor pornite din el, iar acestea se opresc. Comanda nohup (no hang up) pornește programul astfel încât să ignore acest semnal.
Dacă ieșirea standard este terminalul, nohup o redirecționează automat în fișierul nohup.out din directorul curent (sau din $HOME, dacă directorul curent nu poate fi scris). În practică se combină aproape mereu cu &, ca procesul să ruleze în fundal, și cu o redirecționare explicită către un fișier de jurnal.
Pentru servicii permanente, varianta potrivită este o unitate systemd; nohup este bun pentru sarcini ocazionale, de exemplu un import lung de date pornit prin SSH.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
comandă |
Programul care trebuie să ignore SIGHUP, urmat de argumentele lui. |
& |
Operatorul shell-ului care pornește comanda în fundal, ca terminalul să rămână liber. |
> fișier 2>&1 |
Trimite ieșirea și erorile într-un fișier ales de tine în loc de nohup.out. |
--help, --version |
Singurele opțiuni proprii ale lui nohup (versiunea GNU). |
Exemple
Exemplul 1: Un import lung care supraviețuiește deconectării
Ieșirea merge în import.log. Poți închide sesiunea SSH, iar scriptul continuă. Shell-ul afișează numărul jobului și PID-ul.
nohup ./import_clienti.sh > import.log 2>&1 &
Ieșire în terminal
[1] 48213
Exemplul 2: Ieșirea ajunge în fișierul de jurnal
Pornim în fundal un mic „backup” cu nohup, așteptăm cu wait să se termine și citim jurnalul.
nohup bash -c 'echo "Backup pornit pentru Iași"; echo "Backup terminat"' > backup.log 2>&1 &
wait
cat backup.log
Rezultat
Backup pornit pentru Iași
Backup terminat
Exemplul 3: Fără redirecționare: fișierul nohup.out
Rulată direct din terminal, comanda anunță unde scrie ieșirea.
nohup python3 genereaza_raport.py &
Ieșire în terminal
[1] 48377
nohup: ignoring input and appending output to 'nohup.out'
Greșeli frecvente
- Uitarea lui
&:nohup comandăfără&rulează în prim-plan și blochează terminalul până se termină. - Lăsarea
nohup.outsă crească la nesfârșit; redirecționează ieșirea într-un fișier de jurnal pe care îl rotești sau îl ștergi. - Folosirea
nohuppentru un serviciu care trebuie să repornească după restart: pentru asta scrie o unitatesystemd.
Comenzi înrudite
jobs, bg și fg: Gestionează joburile shell-ului: comenzi pornite în fundal, suspendate cu Ctrl+Z și aduse înapoi în prim-plan.systemctl: Controlează sistemul de inițializare systemd și administrează serviciile (demoni de fundal).kill: Trimite un semnal de control sau oprire către un proces specificat prin ID (PID).