Ви запустили у терміналі довгу команду: завантаження великого файлу, копіювання папки чи розрахунок. Закриваєте вікно терміналу — і команда зупиняється разом із ним. Щоб цього не сталося, є проста команда nohup. Її назва означає «не реагувати на вимкнення»: програма продовжує працювати, навіть коли термінал закрито.
Як користуватися nohup
Просто поставте слово nohup перед своєю командою. Наприклад, завантажимо файл, а термінал можна буде закрити:
nohup wget https://example.com/великий-файл.zip &
Символ & у кінці запускає команду у фоні. Це означає, що термінал одразу стає вільним, і ви можете вводити інші команди. Без цього символу команда займала б вікно, поки не завершиться.
Після запуску ви побачите рядок на кшталт [1] 12345. Число в дужках — номер завдання, а друге число — номер процесу. Процес — це запущена програма.
Куди потрапляє те, що виводить команда
Фонова команда не має вікна, куди писати повідомлення, тому nohup складає їх у файл nohup.out у поточній папці. Прочитати його можна так:
cat nohup.out
А щоб стежити за ним у реальному часі, скористайтеся:
tail -f nohup.out
Вийти з перегляду можна комбінацією Ctrl+C: на роботу фонової програми це не вплине.
Збережіть результат у власний файл
Файл nohup.out зручно замінити на файл із зрозумілою назвою. Для цього перенаправте виведення:
nohup wget https://example.com/великий-файл.zip > завантаження.log 2>&1 &
Частина > завантаження.log записує звичайні повідомлення у файл, а 2>&1 додає туди ж повідомлення про помилки.
Як перевірити, що команда ще працює
Знайдіть процес за назвою:
pgrep -a wget
Якщо рядок з’явився, програма працює. Якщо порожньо, вона вже завершилась або зупинилась із помилкою — тоді загляньте у файл-журнал.
Як зупинити фонову команду
Візьміть номер процесу, який показала команда pgrep, і завершіть його:
kill 12345
Замість 12345 підставте свій номер. Якщо програма не реагує, використайте kill -9 12345, але це примусове завершення, і програма не встигне зберегти результат.
Що робити, якщо команда вже запущена без nohup
Якщо ви запустили довгу команду й раптом зрозуміли, що потрібно закрити термінал, є вихід:
- Натисніть Ctrl+Z, щоб поставити програму на паузу.
- Введіть
bg, щоб вона продовжила роботу у фоні. - Введіть
disown, щоб відв’язати її від терміналу.
Після цього термінал можна закрити, а програма працюватиме далі.
Поширені запитання
Чому з’являється файл nohup.out?
Так nohup зберігає повідомлення фонової програми. Якщо вони вам не потрібні, перенаправте виведення у /dev/null: nohup команда > /dev/null 2>&1 &.
Чи працює nohup після вимкнення комп’ютера?
Ні. Команда живе, доки працює система. Після перезавантаження її треба запустити знову.
Чим nohup відрізняється від tmux?
Nohup просто захищає програму від закриття терміналу. Tmux дає змогу пізніше повернутися у те саме вікно й побачити, що відбувається. Для простих завдань вистачає nohup.
Команда не запустилась
Перевірте, чи правильно написано команду без nohup. Якщо вона працює без нього, а з ним ні, подивіться повідомлення у файлі nohup.out.
Порада від Kernelka
Для довгих завдань завжди вказуйте файл-журнал. Тоді за кілька годин ви точно знатимете, чи все пройшло добре, а не гадатимете, чому команда мовчить.
Підсумок
nohup команда &залишає програму працювати після закриття терміналу.- Повідомлення потрапляють у файл
nohup.outабо у файл, який ви вкажете. - Перевірити процес можна командою
pgrep, зупинити — командоюkill. - Для вже запущеної програми допоможуть Ctrl+Z,
bgіdisown. - Після вимкнення комп’ютера фонова програма зупиняється.