Управление процессами (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в текущей директории. Убедитесь, что у вас есть права на запись в эту директорию.
