NoHUP: как продолжить выполнение программы в Linux после выхода
Часто бывает нужно запустить процесс, который выполняется достаточно долго. Например, в эти выходные главный редактор Либератума помогал одному зажиточному гражданину загрузить 300 млн записей в Postgres. Как сделать так, чтобы после выхода из SSH скрипт загрузки продолжил работу?
Используем NoHUP
Воспользуемся помощью прекрасной программы nohup. Она перехватывает сигнал SIGHUP 1 и не дает программе выпилиться после ухода пользователя. Вывод на экран будет сохранен в файле nohup.out.
nohup ./script &
Если программа завершится к приходу юзера, то проблемы нет. А если будет продолжать работать? Тут есть только один способ вернуть себе контроль, причем способ не очень хороший. Надо послать SIGKILL и запустить заново программу. Если хитрый читатель знает корректный способ приаттачить обратно к терминалу нужный процесс без прерывания программы, просьба срочно запилить соответствующий комментарий.
Зачем еще нужен NoHUP
Допустим, вы хотите промониторить доступность сайта в течении некоторого времени. Запиливаем с терминала такую команду:
nohup ping -c 10000 ya.ru > ping.txt &
Всё, можно расслабить булки — умная машина сделает всё сама.
- 1. SIGHUP — Signal Hang Up — обрыв линии, потеря сигнала от управляющего терминала
Комментарии
korshun_199
6 декабря, 2018 - 16:06
Для этих целей есть screen, в любое время можно подключиться к терминалу, как будто не было отключения сеанса:
screen -S имя_процесса script
screen -list - просмотр всех терминалов
screen -r имя_процесса - подключение к процессу
screen --help - остальные приблуды, свистелки и перделки.
pomodor
6 декабря, 2018 - 18:18
То, что нужно! Благодарю! Слышал про screen, но не знал, что он образует такой замечательный симбиоз с ssh.
pomodor
8 декабря, 2018 - 00:15
Нашел tmux. Как screen, но с человеческим лицом.
Чингачгук
5 января, 2019 - 21:41
аутистомэн, "опытный линуксойд". Спустя овер 20+ лет узнал про мультиплексоры. gjмэн
Комментировать