Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Linux / DevOps

Фоновый режим в Linux: запуск скрипта через nohup и &, защита от закрытия SSH

Обновлено: 27.08.2026 · Официальная документация ↗

Почему скрипт обрывается при закрытии SSH-клиента?

Когда вы подключаетесь к серверу по SSH и запускаете длинный скрипт (бэкап, парсинг данных, обучение нейросети или перенос файлов), процесс привязывается к текущей терминальной сессии. Как только вы закрываете окно терминала, ноутбук уходит в спящий режим или обрывается интернет, операционная система автоматически отправляет всем дочерним процессам сигнал SIGHUP (Signal Hang Up), который мгновенно убивает запущенную программу.

Сравнение способов фонового запуска:

СпособСложностьЗащита от обрыва SSHВозможность вернуться в консоль
Символ & в концеОчень легкоНет (при закрытии SSH процесс может упасть)Нет
nohup + &Легко100% защита от закрытия консолиВывод пишется в nohup.out
Утилита screen / tmuxСредне100% защитаПолный интерактивный возврат к экрану

3 способа запуска программ в фоновом режиме

  1. 1. Стандартный надежный способ: утилита nohup

    Команда nohup (No Hang Up) игнорирует сигнал обрыва связи, а символ & отправляет задачу выполняться в фоновый поток:

    nohup ./long_script.sh > output.log 2>&1 &

    Разбор команды:
    nohup — защищает процесс от закрытия сессии.
    > output.log 2>&1 — перенаправляет весь обычный вывод и ошибки в текстовый файл output.log.
    & — освобождает командную строку для дальнейшей работы.

    Теперь вы можете спокойно закрывать терминал — скрипт продолжит работу на сервере.

  2. 2. Если скрипт уже запущен в терминале прямо сейчас

    Если вы запустили тяжелую команду и поняли, что не можете закрыть консоль:

    • Нажмите сочетание Ctrl + Z (это приостановит выполнение задачи).
    • Введите команду bg и нажмите Enter (переведет задачу в фоновый режим).
    • Введите команду disown -h (отвяжет процесс от текущего окна SSH).
  3. 3. Использование виртуального терминала Screen (Интерактивно)

    # Устанавливаем и запускаем новую виртуальную сессию:
    sudo apt install screen -y
    screen -S my_backup
    
    # Запускаем скрипт внутри screen:
    ./long_script.sh

    Чтобы отключиться от сессии, оставив ее работать: нажмите Ctrl + A, затем клавишу D (Detach).
    Чтобы вернуться обратно к процессу позже: введите screen -r my_backup.

💡 Практика специалистов: Для постоянных фоновых служб (демонов) на Production-серверах не используйте nohup. Оформляйте их как стандартные systemd unit-сервисы с директивой Restart=always. Nohup идеален для разовых тяжелых административных скриптов.

Частые вопросы (FAQ)

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

Найдите его номер PID через команду ps aux | grep long_script.sh и завершите: sudo kill <PID>.

Что такое файл nohup.out?

Если при запуске через nohup вы не указали файл для сохранения вывода, утилита автоматически запишет все логи программы в файл nohup.out в текущей папке.

Как посмотреть список всех фоновых задач текущей сессии?

Выполните команду jobs. Она покажет номера запущенных в фоне задач.

Чем tmux лучше screen?

tmux — это более современный и гибкий аналог screen с поддержкой разделения экрана на панели, удобным статус-баром и широкими возможностями кастомизации.

Полезные материалы
Рекомендуем