Если ты когда-нибудь запускал долгий скрипт на сервере, а потом случайно закрыл 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
в терминале.
Пусть твои процессы никогда не обрываются!
Ваш отзыв