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

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

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

Команда nohup в Linux: как запустить фоновый скрипт без закрытия при выходе

Обновлено: 27.08.2026  ·  Официальная база знаний

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

Когда вы подключаетесь к серверу по SSH, операционная система привязывает все запущенные вами команды к текущей сессии терминала. Как только вы закрываете вкладку PuTTY/терминала, пропадает интернет или завершается сессия, ядро Linux отправляет всем вашим запущенным программам сигнал SIGHUP (Signal Hang UP — обрыв связи), и процесс немедленно завершает свою работу.

Режим запускаРеакция на закрытие окна терминалаКуда пишется вывод программы
python3 bot.py (Обычный)Процесс мгновенно аварийно завершаетсяПрямо в окно текущего терминала
python3 bot.py & (Фоновый)Процесс завершается при получении SIGHUPВ окно терминала (мешает вводу команд)
nohup ./bot.sh & (Nohup)Продолжает непрерывно работатьВ отдельный файл лога (nohup.out)

Инструкция по использованию утилиты nohup

Утилита nohup (No Hang Up) перехватывает сигнал отключения сессии и указывает ядру операционной системы продолжать выполнение процесса даже после полного отключения пользователя.

  1. Шаг 1. Делаем файл скрипта исполняемым (если запускается .sh файл):
    chmod +x /path/to/start_bot.sh
  2. Шаг 2. Запуск программы через nohup в фоновом режиме:

    Символ & в самом конце команды обязателен — он отправляет задачу в фоновый режим, освобождая командную строку для дальнейшей работы:

    nohup ./start_bot.sh &
  3. Шаг 3. Перенаправление логов в собственный файл:

    По умолчанию nohup пишет все логи в файл nohup.out. Чтобы направить вывод в свой файл лога и отделить ошибки, используйте перенаправление потоков:

    nohup python3 -u /home/user/bot.py > /home/user/bot.log 2>&1 &
  4. Шаг 4. Проверяем, что процесс успешно запущен и работает:

    Убедимся в наличии запущенного процесса через фильтрацию списка задач:

    ps aux | grep bot.py
  5. Шаг 5. Как остановить процесс, запущенный через nohup:

    Найдите идентификатор процесса (PID — число во второй колонке вывода ps) и завершите его:

    kill 12345
Практический опыт инженера: Для простых разовых скриптов nohup идеален. Но если вы запускаете коммерческого Telegram-бота или Node.js бэкенд, лучше потратить 3 минуты и настроить конфигурационный юнит systemd с параметром 'Restart=always', чтобы сервис сам поднимался при падениях.

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

Что означает конструкция 2>&1 в команде?

В Linux поток 1 — это стандартный вывод (обычные сообщения), а поток 2 — поток ошибок (stderr). Конструкция 2>&1 перенаправляет все системные ошибки в тот же файл лога, куда пишутся обычные сообщения.

Почему Python-скрипт под nohup не сразу пишет строки в файл лога?

Python буферизирует вывод в файл. Чтобы сообщения появлялись в логе мгновенно в реальном времени, запускайте Python с ключом -u (unbuffered): nohup python3 -u script.py &.

Чем nohup отличается от утилит screen и tmux?

Nohup просто отвязывает процесс от терминала и пишет вывод в файл. Утилиты screen и tmux создают полноценную виртуальную сессию, к которой можно повторно подключиться и увидеть интерактивный экран программы.

Запустится ли процесс заново, если перезагрузить весь сервер?

Нет. Nohup защищает только от закрытия окна терминала. Для автозапуска программы после перезагрузки сервера необходимо оформить ее как службу systemd (Systemd Service).