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

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

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

Linux / DevOps

Команда 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).

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