nohup
Что делает команда nohup в Linux
Команда nohup в Linux — это инструмент, который позволяет запускать процессы, продолжающие работу даже после выхода пользователя из системы. Название происходит от выражения “no hang up” — «не вешать трубку». Это особенно полезно, если вы хотите, чтобы длительный процесс (например, резервное копирование, сборка проекта или анализ данных) не был прерван при закрытии терминала или разрыве SSH-сессии.
Когда вы запускаете процесс через команду nohup в Linux, она перенаправляет стандартные потоки ввода и вывода, чтобы процесс не зависел от терминала. По умолчанию вывод команды записывается в файл nohup.out, если вы не указали другой файл для вывода.
Пример базового использования:
nohup python3 long_script.py &
Здесь & отправляет процесс в фоновый режим, а nohup гарантирует, что процесс не завершится при разрыве сессии.
Основные параметры и синтаксис команды nohup в Linux
Синтаксис команды выглядит просто:
nohup команда [аргументы] > файл_вывода 2>&1 &
Рассмотрим основные параметры и элементы этой конструкции подробнее.
Параметр 1: перенаправление вывода
По умолчанию команда записывает весь стандартный вывод и ошибки в файл nohup.out. Однако вы можете указать свой файл:
nohup ./backup.sh > backup.log 2>&1 &
Здесь:
>— перенаправляет стандартный вывод в файлbackup.log;2>&1— объединяет поток ошибок с потоком вывода, чтобы всё записывалось в один файл;&— отправляет процесс в фоновый режим.
Такой подход особенно удобен при автоматизации резервного копирования или обновления систем, где важно сохранить логи выполнения.
Параметр 2: использование с другими командами
Команда nohup в Linux может сочетаться с любыми скриптами или утилитами. Например:
nohup rsync -avz /home/user/ /mnt/backup/ &
nohup tar -czf archive.tar.gz /var/log/ &
В этих случаях процессы архивации или синхронизации продолжат выполняться, даже если вы закроете терминал.
Параметр 3: использование с SSH-сессиями
Если вы работаете по SSH и хотите запустить долгую задачу, используйте команду nohup в Linux, чтобы обезопасить процесс от разрыва соединения:
nohup ./deploy.sh &
exit
После выхода из сессии процесс продолжит работу на сервере.
nohup.out после завершения процесса — он содержит вывод программы, включая возможные ошибки.Практические примеры использования команды nohup в Linux
Пример 1: запуск Python-скрипта в фоне
Предположим, вы запускаете аналитический скрипт, который работает несколько часов:
nohup python3 data_analysis.py > analysis.log 2>&1 &
Теперь вы можете спокойно выйти из системы — процесс не остановится.
Чтобы проверить, выполняется ли процесс, используйте:
ps aux | grep data_analysis
А чтобы завершить его:
kill -9 <PID>
где <PID> — идентификатор процесса.
Пример 2: комбинирование nohup с at и cron
Вы можете использовать команду nohup в Linux совместно с планировщиками задач:
echo "nohup ./update.sh > update.log 2>&1 &" | at 02:00
Этот пример запускает обновление в два часа ночи, даже если пользователь не будет в системе.
cron используйте полный путь к командам и скриптам, так как переменные окружения могут отличаться от интерактивной сессии.Как проверить работу процесса, запущенного через nohup
Чтобы убедиться, что процесс, запущенный через команду nohup в Linux, работает корректно, можно использовать несколько способов.
Проверка через ps и grep
ps -ef | grep имя_процесса
Это отобразит все процессы, в том числе те, что были запущены с помощью nohup.
Проверка через лог
Если вы перенаправили вывод в свой лог-файл, можно просмотреть последние строки в реальном времени:
tail -f backup.log
Так вы сможете следить за прогрессом задачи, не вмешиваясь в её выполнение.
Отличие nohup от других способов фонового запуска
В Linux есть и другие инструменты для фонового выполнения процессов, например screen и tmux. Однако команда nohup в Linux проще и не требует создания виртуальных терминалов.
screenиtmuxпозволяют возвращаться в сессию и видеть интерфейс процесса.nohupне предоставляет интерфейса, но обеспечивает простоту и надежность при однократных задачах.
Если вы хотите запустить простую задачу, которая должна продолжить работу после выхода из системы, команда nohup в Linux — оптимальный вариант.
Как удалить или перезапустить процесс nohup
Чтобы остановить запущенный процесс, выполните:
ps -ef | grep nohup
kill <PID>
Если нужно перезапустить задачу, просто вызовите ту же команду с nohup, указав обновленные аргументы или файлы логов.
Команда nohup в Linux — незаменимый инструмент системных администраторов, DevOps-инженеров и разработчиков, работающих с удаленными серверами. Она позволяет запускать задачи в фоне, сохранять их вывод и гарантировать выполнение даже при обрыве соединения.