Что такое nohup?
nohup — это аббревиатура от 'No Hang Up', что означает выполнение команды с игнорированием сигнала отключения (сигнала HUP). Обычно, когда вы закрываете окно терминала, запущенные программы также завершаются, но nohup действует как щит, предотвращая это.
3 ключевые концепции
- Игнорирование сигнала HUP: Процесс продолжает работать, игнорируя сигнал завершения (SIGHUP), отправляемый системой при выходе пользователя.
- nohup.out: Если не указан отдельный файл для сохранения, результат выполнения (вывод) автоматически сохраняется в файл `nohup.out`.
- & (фоновый режим): Сам по себе nohup занимает терминал. Обычно в конце команды добавляют `&`, чтобы отправить ее в фоновый режим.
Основные синтаксис и опции (Shell)
Сам по себе nohup не имеет сложных опций. Вместо этого он используется в сочетании с **выполняемой командой** и **перенаправлением (указанием направления вывода)**.
1. Базовая конфигурация выполнения
2. Управление логами (выводом)
3. Справка
Сгенерированная команда:
Комбинируйте команды.
Описание:
`nohup` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры сценариев использования
Наиболее часто используемые шаблоны nohup на практике.
Самый простой способ использования
nohup ./backup.sh &
Запускает скрипт в фоновом режиме. Вывод накапливается в `nohup.out`.
Указание имени файла лога (рекомендуется)
nohup python3 app.py > my-app.log 2>&1 &
Сохраняет логи в `my-app.log` вместо `nohup.out`. `2>&1` означает сохранение сообщений об ошибках в тот же файл.
Выполнение без логов
nohup ./heavy-task.sh > /dev/null 2>&1 &
Если вывод не нужен или слишком велик, что может привести к заполнению диска, он перенаправляется в `/dev/null`.
Поиск запущенного процесса nohup
ps -ef | grep app.py
Проверяет запущенные процессы с помощью команды `ps`.
Установка
nohup — это базовая команда, входящая в состав 'GNU Coreutils', и уже установлена почти во всех дистрибутивах Linux.
Проверка установки
В большинстве случаев отдельная установка не требуется. Вы можете проверить статус установки с помощью команды ниже.
Проверка версии
nohup --version
Советы и меры предосторожности
Полезные советы
- Уже запущенная задача?: Если вы забыли использовать nohup и запустили команду, вы можете нажать `Ctrl+z`, чтобы остановить ее, затем `bg`, чтобы перевести в фоновый режим, и использовать команду `disown -h %1`, чтобы добиться эффекта nohup.
- Как завершить: Процесс, запущенный с помощью nohup, не завершается по `Ctrl+c`. Вам нужно найти PID (идентификатор процесса) с помощью `ps -ef | grep [имя]` и завершить его командой `kill -9 [PID]`.
- Внимание к объему диска: Если долго работающая программа продолжает записывать логи в `nohup.out`, файл может стать огромным и привести к остановке сервера. Регулярно очищайте его или используйте `/dev/null`.