Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Фоновый режим в 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 с поддержкой разделения экрана на панели, удобным статус-баром и широкими возможностями кастомизации.