Як залишити команду працювати командою nohup

Як залишити команду працювати командою nohup
Категорії: Основи Linux

Ви запустили у терміналі довгу команду: завантаження великого файлу, копіювання папки чи розрахунок. Закриваєте вікно терміналу — і команда зупиняється разом із ним. Щоб цього не сталося, є проста команда 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

Якщо ви запустили довгу команду й раптом зрозуміли, що потрібно закрити термінал, є вихід:

  1. Натисніть Ctrl+Z, щоб поставити програму на паузу.
  2. Введіть bg, щоб вона продовжила роботу у фоні.
  3. Введіть 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.
  • Після вимкнення комп’ютера фонова програма зупиняється.

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта використовується виключно для зв'язку з тобою за потреби.