nohup

Что делает команда nohup в Linux

Команда nohup в Linux — это инструмент, который позволяет запускать процессы, продолжающие работу даже после выхода пользователя из системы. Название происходит от выражения “no hang up” — «не вешать трубку». Это особенно полезно, если вы хотите, чтобы длительный процесс (например, резервное копирование, сборка проекта или анализ данных) не был прерван при закрытии терминала или разрыве SSH-сессии.

Когда вы запускаете процесс через команду nohup в Linux, она перенаправляет стандартные потоки ввода и вывода, чтобы процесс не зависел от терминала. По умолчанию вывод команды записывается в файл nohup.out, если вы не указали другой файл для вывода.

Пример базового использования:

Bash
nohup python3 long_script.py &

Здесь & отправляет процесс в фоновый режим, а nohup гарантирует, что процесс не завершится при разрыве сессии.

Основные параметры и синтаксис команды nohup в Linux

Синтаксис команды выглядит просто:

Bash
nohup команда [аргументы] > файл_вывода 2>&1 &

Рассмотрим основные параметры и элементы этой конструкции подробнее.

Параметр 1: перенаправление вывода

По умолчанию команда записывает весь стандартный вывод и ошибки в файл nohup.out. Однако вы можете указать свой файл:

Bash
nohup ./backup.sh > backup.log 2>&1 &

Здесь:

  • > — перенаправляет стандартный вывод в файл backup.log;
  • 2>&1 — объединяет поток ошибок с потоком вывода, чтобы всё записывалось в один файл;
  • & — отправляет процесс в фоновый режим.

Такой подход особенно удобен при автоматизации резервного копирования или обновления систем, где важно сохранить логи выполнения.

Параметр 2: использование с другими командами

Команда nohup в Linux может сочетаться с любыми скриптами или утилитами. Например:

Bash
nohup rsync -avz /home/user/ /mnt/backup/ &
nohup tar -czf archive.tar.gz /var/log/ &

В этих случаях процессы архивации или синхронизации продолжат выполняться, даже если вы закроете терминал.

Параметр 3: использование с SSH-сессиями

Если вы работаете по SSH и хотите запустить долгую задачу, используйте команду nohup в Linux, чтобы обезопасить процесс от разрыва соединения:

Bash
nohup ./deploy.sh &
exit

После выхода из сессии процесс продолжит работу на сервере.

Совет: всегда проверяйте файл nohup.out после завершения процесса — он содержит вывод программы, включая возможные ошибки.

Практические примеры использования команды nohup в Linux

Пример 1: запуск Python-скрипта в фоне

Предположим, вы запускаете аналитический скрипт, который работает несколько часов:

Bash
nohup python3 data_analysis.py > analysis.log 2>&1 &

Теперь вы можете спокойно выйти из системы — процесс не остановится.

Чтобы проверить, выполняется ли процесс, используйте:

Bash
ps aux | grep data_analysis

А чтобы завершить его:

Bash
kill -9 <PID>

где <PID> — идентификатор процесса.

Пример 2: комбинирование nohup с at и cron

Вы можете использовать команду nohup в Linux совместно с планировщиками задач:

Bash
echo "nohup ./update.sh > update.log 2>&1 &" | at 02:00

Этот пример запускает обновление в два часа ночи, даже если пользователь не будет в системе.

Совет: при работе с cron используйте полный путь к командам и скриптам, так как переменные окружения могут отличаться от интерактивной сессии.

Как проверить работу процесса, запущенного через nohup

Чтобы убедиться, что процесс, запущенный через команду nohup в Linux, работает корректно, можно использовать несколько способов.

Проверка через ps и grep

Bash
ps -ef | grep имя_процесса

Это отобразит все процессы, в том числе те, что были запущены с помощью nohup.

Проверка через лог

Если вы перенаправили вывод в свой лог-файл, можно просмотреть последние строки в реальном времени:

Bash
tail -f backup.log

Так вы сможете следить за прогрессом задачи, не вмешиваясь в её выполнение.

Отличие nohup от других способов фонового запуска

В Linux есть и другие инструменты для фонового выполнения процессов, например screen и tmux. Однако команда nohup в Linux проще и не требует создания виртуальных терминалов.

  • screen и tmux позволяют возвращаться в сессию и видеть интерфейс процесса.
  • nohup не предоставляет интерфейса, но обеспечивает простоту и надежность при однократных задачах.

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

Как удалить или перезапустить процесс nohup

Чтобы остановить запущенный процесс, выполните:

Bash
ps -ef | grep nohup
kill <PID>

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

Команда nohup в Linux — незаменимый инструмент системных администраторов, DevOps-инженеров и разработчиков, работающих с удаленными серверами. Она позволяет запускать задачи в фоне, сохранять их вывод и гарантировать выполнение даже при обрыве соединения.