Home » Команда nohup в Linux — Как сохранить процессы после выхода из системы
Команда nohup в Linux — Как сохранить процессы после выхода из системы

Команда nohup в Linux — Как сохранить процессы после выхода из системы

В этой статье разберёмся, как не потерять запущенные процессы в Linux после выхода из системы, используя команду nohup. Это не просто лайфхак для тех, кто держит серверы на VPS или выделенных машинах — это must-have инструмент для всех, кто не хочет, чтобы долгие сборки, бэкапы, парсеры или любые другие задачи обрывались из-за банального выхода из SSH. Расскажу, как работает nohup, как его быстро внедрить в свой рабочий процесс, приведу реальные примеры, сравню с альтернативами и дам пару гиковских советов, которые реально экономят время и нервы.

Как работает nohup: простыми словами, но по-взрослому

Когда вы запускаете процесс в Linux через терминал (особенно по SSH), он привязан к вашей сессии. Вышли — процесс получил сигнал SIGHUP (hangup) и завершился. Вот тут и появляется nohup — сокращение от no hangup. Эта утилита запускает вашу команду так, чтобы она игнорировала сигнал SIGHUP, а значит, продолжала работать даже после выхода из системы.

Технически nohup делает следующее:

  • Перехватывает сигнал SIGHUP и игнорирует его для дочернего процесса.
  • Перенаправляет стандартный вывод (stdout) и ошибки (stderr) в файл nohup.out, если вы явно не указали иное.
  • Позволяет запускать задачи в фоне (через &), чтобы не держать терминал занятым.

Это не магия, а грамотная работа с сигналами и потоками ввода-вывода. В итоге — процесс живёт своей жизнью, пока не завершится сам или не будет убит вручную.

Быстрый старт: как настроить и использовать nohup

Всё просто до безобразия, но есть нюансы, которые часто упускают новички (и даже опытные админы, когда спешат).

  1. Запуск процесса с nohup
    nohup команда &
    Пример:
    nohup python3 myscript.py &

    Всё, можно выходить из SSH — скрипт продолжит работать.
  2. Проверка работы процесса
    ps aux | grep myscript.py

    или
    jobs -l
  3. Просмотр вывода
    По умолчанию всё пишется в nohup.out в текущей директории. Смотреть можно так:
    tail -f nohup.out
  4. Явное указание файлов вывода
    nohup команда > mylog.log 2>&1 &

    Так вы не засоряете директорию файлом nohup.out.
  5. Остановка процесса
    kill PID

    PID можно узнать через ps или jobs -l.

Практические кейсы: когда и зачем использовать nohup

Кейс Что будет без nohup Что будет с nohup Рекомендация
Долгая компиляция или сборка (например, make) Вышли из SSH — процесс оборвался, всё зря Процесс продолжает работать, результат сохраняется Всегда используйте nohup make ... &
Бэкап или миграция БД Оборвался — бэкап не полный, возможна потеря данных Бэкап завершится корректно, даже если вы отключились Запускайте через nohup pg_dump ... &
Парсинг или обработка больших файлов Сессия упала — процесс потерян, данные не обработаны Задача завершится, результат можно анализировать Используйте nohup python3 parser.py &
Запуск демона или сервиса вручную Сервис не переживёт разлогин Сервис продолжит работу Для тестов — ок, для продакшена лучше systemd

Положительные и отрицательные примеры

  • Положительный: Запустили nohup rsync -avz /data /backup & перед уходом домой — утром бэкап готов, даже если ночью интернет “моргнул”.
  • Отрицательный: Запустили nohup ./myserver & и забыли про логи — потом долго ищете, почему сервер не стартует (всё ушло в nohup.out).

    Рекомендация: Всегда явно указывайте файлы вывода и ошибок!
  • Положительный: Используете nohup в скриптах автозапуска — процессы не зависят от вашей сессии, удобно для тестов.
  • Отрицательный: Используете nohup для постоянных сервисов — после перезагрузки всё пропадает. Лучше использовать systemd или supervisord.

Полезные команды и шаблоны


# Запуск с явным указанием вывода
nohup команда > output.log 2>&1 &

# Проверка процесса
ps aux | grep команда
jobs -l

# Просмотр лога
tail -f output.log

# Остановка процесса
kill PID

# Запуск нескольких процессов
nohup ./script1.sh > log1.log 2>&1 &
nohup ./script2.sh > log2.log 2>&1 &

Альтернативы nohup: что ещё есть?

nohup — это просто и быстро, но не всегда идеально. Вот что ещё можно использовать:

  • screen — полноценный терминальный мультиплексор. Позволяет “отцеплять” и “прицеплять” сессии, запускать кучу процессов, переключаться между ними.
    Официальный сайт GNU Screen
  • tmux — современный и удобный мультиплексор, любимец DevOps. Можно делить терминал на панели, работать с несколькими сессиями, скриптовать.
    Официальная Wiki tmux
  • systemd — для запуска сервисов и демонов на сервере. Позволяет управлять автозапуском, рестартами, логами.
    Официальная страница systemd
  • supervisord — менеджер процессов на Python, хорош для управления несколькими сервисами.
    Официальный сайт supervisord
Утилита Плюсы Минусы Когда использовать
nohup Просто, быстро, есть везде Нет управления, нет автозапуска после ребута Разовые задачи, скрипты, бэкапы
screen/tmux Гибко, можно возвращаться к сессии Нужно привыкнуть, не всегда удобно для автозапуска Долгие интерактивные задачи, разработка
systemd Автозапуск, управление, логи Сложнее конфигурировать, не для разовых задач Постоянные сервисы, продакшн
supervisord Управление группой процессов, рестарты Требует установки, не всегда есть по умолчанию Микросервисы, dev/test окружения

Интересные факты и нестандартные применения

  • nohup + cron: Можно запускать задачи по расписанию, которые не зависят от сессии пользователя.
  • nohup в Docker-контейнерах: Иногда используют для запуска фоновых задач внутри контейнера, если не хочется городить supervisord.
  • nohup для обхода ограничений хостинга: На некоторых шаред-хостингах screen и tmux запрещены, а вот nohup работает.
  • nohup в скриптах автодеплоя: Позволяет запускать миграции или сборки, не опасаясь разрыва соединения.

Автоматизация и скрипты: новые возможности

Использование nohup в автоматизации — это быстрый способ запускать задачи, которые не должны зависеть от вашей сессии. Например:

  • Автоматические бэкапы по расписанию (cron + nohup)
  • Запуск CI/CD скриптов, которые могут длиться часами
  • Параллельная обработка больших данных (несколько nohup процессов)
  • Тестирование новых сервисов без прописывания unit-файлов для systemd

В скриптах удобно использовать конструкции вроде:

nohup ./long_task.sh > /var/log/long_task.log 2>&1 &

— и не париться, что что-то оборвётся.

Статистика и сравнение: почему nohup до сих пор актуален

  • По данным Stack Overflow, nohup входит в топ-10 команд, которые ищут админы для работы с процессами.
  • На большинстве дистрибутивов Linux nohup установлен по умолчанию, в отличие от screen или tmux.
  • В 90% случаев для разовых задач nohup быстрее и проще, чем писать unit-файл для systemd.

Выводы и рекомендации

nohup — это тот самый “швейцарский нож” для запуска процессов в Linux, который должен быть в арсенале каждого, кто работает с серверами. Он прост, надёжен и не требует лишних телодвижений. Если вам нужно быстро запустить задачу, которая должна дожить до конца независимо от вашей сессии — nohup ваш выбор.

  • Для разовых задач, бэкапов, миграций, парсинга — используйте nohup.
  • Для постоянных сервисов и демонов — переходите на systemd или supervisord.
  • Для интерактивной работы — попробуйте screen или tmux.
  • Всегда явно указывайте файлы вывода и ошибок, чтобы не потерять логи.

Если вы только начинаете работать с VPS или выделенными серверами — попробуйте VPS или выделенный сервер для практики. А nohup поможет не терять время и нервы при запуске долгих задач.

Официальная документация по nohup: man nohup

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


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked