Команда nohup в Linux: запуск процессов в фоновом режиме

Если ты когда-нибудь запускал долгий скрипт на сервере, а потом случайно закрыл ssh-сессию и потерял всё, что делал — поздравляю, ты не один такой. В Linux есть отличный способ не терять процессы при выходе из терминала: команда nohup. Она буквально спасает нервы, когда надо оставить что-то работать в фоне, а самому спокойно уйти ужинать или даже перезагрузить локальный комп.

Возможности

  • Запуск процессов, которые не погибнут при разрыве соединения с терминалом
  • Работа в фоне — легко запускать что-то и сразу получать shell обратно
  • Логирование вывода в файл — ничего не потеряется
  • Работает практически в любом дистрибутиве Linux (и даже на MacOS)

Что требуется

  • Операционная система: Любой современный Linux (Ubuntu, Debian, CentOS, Fedora, Arch и т.д.), также MacOS
  • Доступ к bash или sh
  • Железо: Любое, где крутится Linux — даже Raspberry Pi
  • Права: Обычный пользователь, root не нужен

Установка — пошаговая инструкция

Скорее всего, nohup уже есть в системе. Проверить просто:

which nohup

Если путь выводится (например, /usr/bin/nohup), всё ок. Если нет — ставим пакет coreutils (именно он содержит nohup).

  • Debian/Ubuntu:
    sudo apt update
    sudo apt install coreutils
    
  • CentOS/Fedora/RHEL:
    sudo yum install coreutils
    
  • Arch Linux:
    sudo pacman -S coreutils
    
  • MacOS (через Homebrew, если вдруг не стоит):
    brew install coreutils
    

Всё, теперь nohup точно есть.

Использование: полный список команд и вариантов

  • Запуск команды в фоне с сохранением вывода:
    nohup команда &
    

    Например:

    nohup python3 long_script.py &

  • Перенаправление вывода в свой файл:
    nohup команда > mylog.txt 2>&1 &
    

    2>&1 — объединяет stderr и stdout в один файл.

  • Остановить процесс (если надо):
    ps aux | grep команда
    kill PID
    
  • Проверить, что процесс живёт:
    ps aux | grep команда
    tail -f nohup.out
    
  • Запустить несколько процессов:
    nohup команда1 > log1.txt 2>&1 &
    nohup команда2 > log2.txt 2>&1 &
    

Пояснения:

  • nohup по умолчанию пишет всё в nohup.out в текущей папке
  • Чтобы не засорять папку, всегда указывай свой лог-файл через > mylog.txt 2>&1
  • Символ & в конце — именно он отправляет процесс в фон

Ошибки — как делать не надо

  • Не пиши просто nohup команда без &!

    Так процесс не уйдёт в фон, и ты не получишь обратно терминал.

  • Не забывай про вывод!

    Если не указать лог, файл nohup.out может вырасти до гигабайтов и засорить диск.

  • Не путай nohup и screen/tmux.

    nohup — для запуска и забвения, а screen или tmux — для интерактивной работы.

  • Не запускай критичные сервисы через nohup!

    Для демонов — systemd, supervisord и прочие взрослые штуки.

Пример реального использования в окружении

Допустим, у тебя есть скрипт backup.sh, который делает бэкап базы пару часов. Ты подключился по ssh, но не хочешь сидеть и ждать.

nohup bash backup.sh > backup.log 2>&1 &

Теперь можно спокойно закрывать терминал — процесс не умрёт, а весь вывод будет в backup.log. Проверить статус можно так:

tail -f backup.log

А если нужно найти процесс:

ps aux | grep backup.sh

Заключение

nohup — это must-have для любого, кто работает с удалёнными серверами, особенно если часто запускаешь длинные задачи. Это просто, надёжно и встроено почти везде. Но не забывай: для серьёзных демонов лучше использовать systemd или аналоги. Если хочешь узнать больше, читай официальную man-страницу или просто вбей man nohup в терминале.

Пусть твои процессы никогда не обрываются!

Хотите прочитать больше про Администрирование?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *