Bash Linux + Git: от новичка до уверенного пользователяРабота с процессами и задачамиУправление процессами (jobs, ps, kill, nohup)

Управление процессами (jobs, ps, kill, nohup)

Уроки курсаУправление процессами (jobs, ps, kill, nohup)

Разбор команды nohup

Что такое nohup?

nohup (от англ. no hangup) — это команда, которая позволяет запускать другую команду таким образом, чтобы она игнорировала сигнал HUP (hangup). Этот сигнал обычно посылается процессам при закрытии терминала или разрыве SSH-сессии. Использование nohup гарантирует, что запущенный процесс продолжит работу, даже если вы выйдете из системы.

Основной синтаксис

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

  • команда [аргументы] — команда, которую вы хотите выполнить с nohup.
  • > вывод_файла 2>&1 — перенаправление стандартного вывода и стандартного потока ошибок в указанный файл (если не указано, вывод по умолчанию будет записываться в файл nohup.out).
  • & — амперсанд позволяет запустить команду в фоне, возвращая управление терминалом.

Примеры использования

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

nohup ./myscript.sh > myscript.log 2>&1 &

  • Что происходит:
    Скрипт myscript.sh запускается в фоне, и все его вывод (как стандартный, так и ошибки) записывается в файл myscript.log. Даже если вы закроете терминал, скрипт продолжит работать.

Пример 2: Запуск длительной команды

nohup python long_running_script.py &

  • Что происходит:
    Длительный Python-скрипт запускается в фоне. Если не указать перенаправление вывода, стандартный вывод и ошибки будут записаны в файл nohup.out.

Пример 3: Просмотр файла nohup.out

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

less nohup.out

Полезные советы

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

    nohup some_command > output.log 2>&1 &

  • Фоновые процессы:
    Запуск команд с nohup часто сочетается с символом &, чтобы процесс выполнялся в фоне, освобождая терминал для других задач.

  • Проверка процессов:
    Используйте команды типа ps, pgrep или jobs для отслеживания запущенных процессов, если вы хотите убедиться, что процесс продолжает работать.

  • nohup.out:
    Если вывод не перенаправлен, по умолчанию он записывается в файл nohup.out в текущей директории. Убедитесь, что у вас есть права на запись в эту директорию.