В ходе настройки самосборного NAS-сервера (смотри предыдущие посты: сборка системы и установка openmediavault) пришлось столкнуться с тем, что при подключении по ssh и выполнении долгих команд любой обрыв связи, закрытие крышки ноутбука, закрытие окна терминала или всё прочее приводило к завершению ssh-сессии и, соответственно, предыванию выполняющейся команды.
Да, обычное поведение такое: если соединение по ssh рвётся, то прерываются все операции. Разве это плохо? Ну, конечно! Есть куча продолжительных операций, в ходе выполнения которых терять коннект никак не хочется:
- сборка и синхронизация RAID-массива — может занять часов десять
- форматирование файловой системы массива — часов 20 и больше
- перенос информации с временного накопителя на основной диск — зависит от объёма, но терабайт данных перекидывается очень неспешно, знаете ли
Короче, задача есть. И есть решение. Нам просто нужно to go deeper.
MobaXterm — самый универсальный терминал под Windows. SSH-RDP-FTP-SFTP…
Терминальная сессия открывает нам шелл. Если мы внутри этого шелла откроем новый шелл, запустим в нём нужную долгоиграющую команду, а потом не закроем шелл, а как бы покинем шелл без закрытия, то команда продолжит выполняться.
Для этого есть множество решений. Например, screen. Он для меня не подошёл, так как пытался скачаться с какого-то мутного источника, который у меня не открылся. Тогда можно использовать tmux — разветвитель терминалов. В нём можно делать всякие штуки и разбивать рабочее пространство на несколько панелей терминалов.
Но меня интересует только один: терминал в терминале, который не закроется при обрыве или отключении от ssh.
Что делаем:
Устанавливаем tmux: sudo apt-get install tmux
В нём запускаем долгую команду.
Покидаем сессию без закрытия: для этого жмём ctrl+b (это типа вызов менюшки тмукса, хотя на экране ничего не происходит), а затем d (detach — отцепиться).
Ура, мы вышли в терминал, который можно закрыть и идти спать.
А как вернуться в наш оставленный шелл с долгоиграющей командой внутри? Запускаем tmux attach и прицепляемся к последней сесии, где команда продолжает выполняться.
Tmux — прикольная софтина и довольно многофункциональная. Правда, на маке не все комбинации работают с ctrl+b, особенно с курсорными стрелками (конфликтуют с глобальными сочетаниями в MacOSX), но детачить-аттачить сессию можно без глобальных перенастроек горячих клавиш. Ура!
Смотрите также
- Собираем NAS, часть 2: установка openmediavault
- Собираем недорогой NAS своими руками для дома и семьи
- Что такое RAID 0 и зачем он нужен
- Adobe Flash Player для Mac наконец-то можно удалить
- Перенос системы с eMMC на SSD — личный опыт и Irbis NB 140
Источник: anikeev.com
Настраиваем аутентификацию SSH по ключу в Linux / Unix
Продолжить фоновую задачу / задания SSH при закрытии SSH
У меня тот же вопрос, что и здесь, но даже за его пределами. Если я выйду из системы или выйду из SSH-соединения, моя программа будет работать в фоновом режиме. Перед выходом я bg и jobs чтобы проверить фоновое выполнение задачи, но после выхода из SSH программа не запускается, она закрывается, когда я закрываю окно SSH. Что я могу сделать, если я хочу, чтобы моя программа все еще работала после закрытия окна SSH? Я использую nohup screen но он также не работает, или я что-то упустил?
изменён Community 1
задан Huei 288
4 ответа 4
Когда вы используете screen вам нужно отсоединиться с помощью CTRL+A + D перед выходом из ssh . В качестве альтернативы, если вы хотите запустить процесс напрямую с экрана, вы можете использовать
screen -dmSL [session name] [commands]
- -d начинает сеанс экрана и немедленно отсоединяется от него
- -m заставляет создавать новый сеанс экрана
- -S позволяет дать имя сессии
- -L включает ведение журнала в ~/screenlog.0
пример:
screen -dmSL workstuff myscript.sh
Затем вы можете:
возобновить позже, используя screen -x workstuff
проверьте файл журнала less -r ~/screenlog.0
ответ дан justbrowsing 2k
Используйте tmux . Я даже не уверен, что screen еще находится в стадии активной разработки. Это своего рода предпочтение, но как человек, использующий tmux , я могу засвидетельствовать, что он настроен примерно через 5 минут и работает отлично.
В системе на основе Debian (на удаленной машине):
sudo apt-get install tmux
затем введите tmux чтобы войти, запустите любой процесс, который вам нужен, и нажмите Ctrl + B, затем D (это оставляет сеанс tmux). Затем вы можете выйти из SSH.
Когда вам нужно вернуться / проверить его снова, запустите SSH и введите tmux attach . Это вернет вас к сеансу tmux .
tmux гораздо больше возможностей, как подробно описано здесь. Но это должно решить вашу непосредственную проблему.
Источник: poweruser.guru
4 способа сохранить выполнение команды после выхода из сеанса SSH
Допустим, вы используете удаленную систему через SSH.
Вы хотите запустить команду, которая занимает много времени, а затем выйти из сеанса SSH, но оставить эту команду запущенной, даже если вы больше не подключены к удаленной системе.
Как вы, возможно, знаете, после выхода из SSH все рабочие задания будут прекращены.
Вы начнете работу с начала? Вам не обязательно.
Здесь я даю разные 4 метода, чтобы команда запускалась после выхода из сеанса ssh.
Продолжайте выполнение команды после выхода из сеанса SSH в Linux
Могло бы быть много способов сделать это.
Однако я считаю, что следующие методы просты и понятны.
Способ 1 – Использование screen
Инструмент screen, полноэкранный оконный менеджер с эмуляцией терминала VT100 / ANSI, позволяет безопасно отсоединяться от сеанса SSH без выхода из удаленного задания.
Это будет полезно для тех, кто работает с несколькими удаленными серверами.
Эта команда поставляется предварительно в большинстве операционных систем Linux.
На всякий случай, если он не установлен, его можно установить с помощью диспетчера пакетов вашего дистрибутива.
На Arch Linux и производных:
sudo pacman -S screen
На RHEL, CentOS и других системах на основе RPM:
sudo yum install screen
В Debian, Ubuntu и других системах на основе DEB:
sudo apt-get install screen
sudo zypper install screen
После установки в удаленных системах запустите сеанс screen:
screen
Сеанс уже запущен.
Теперь запустите любую работу или задачу, которые вы хотите сделать в своей удаленной системе.
Я собираюсь загрузить образUbuntu 16.04:
wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu 16.04 ISO составляет около 1,5 ГБ.
Обычное широкополосное подключение занимает около часа.
Вам не нужно так долго ждать.
Просто оставьте процесс загрузки, запущенный на удаленной системе, и выйдите из сеанса экрана, нажав «Ctrl-A», а затем «d».
Вы увидите вывод, как показано ниже.
[detached from 1365.pts-0.server]
После отсоединения сеанса экрана вы можете выйти из удаленной системы. Удаленное задание будет работать на сервере.
Вы можете повторно подключиться к сеансу экрана в любое время, используя команду:
screen -r
Вы увидите, что процесс все еще работает.
Если у вас несколько сеансов screen вам нужно ввести идентификатор сеанса экрана, чтобы повторно подключиться к нему.
Чтобы просмотреть количество сеансов экрана, запустите:
screen -ls
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
Теперь снова подключите требуемый сеанс экрана, скажем, 1382, запустите:
screen -r 1382
Для получения дополнительной информации см. Справочные страницы.
man screen
Метод 2 – Использование tmux
Tmux – это терминальный мультиплексор, который позволяет создавать, получать доступ и управлять несколькими терминалами с одного экрана. tmux можно отсоединить от экрана и продолжить работать в фоновом режиме, а затем снова подключиться.
Как и инструмент «Screen», вы также можете использовать tmux для отсоединения от сеанса SSH без выхода из удаленных заданий.
Команда Tmux устанавливается на большинстве операционных систем Linux.
На всякий случай, если он не установлен, его можно установить с помощью диспетчера пакетов вашего дистрибутива.
На Arch Linux и производных:
sudo pacman -S tmux
На RHEL, CentOS и других системах на основе RPM:
sudo yum install tmux
В Debian, Ubuntu и других системах на основе DEB:
sudo apt-get install tmux
На SUSE / OpenSUSE:
sudo zypper install tmux
После установки tmux запустите сеанс tmux, используя команду:
tmux
Теперь начните свою задачу или задание.
Затем безопасно отделитесь от сеанса tmux, не выходя из удаленных заданий, нажав «CTRL-b», а затем «d».
Это отделит ваш сеанс tmux, но оставит вас в этом сеансе в фоновом режиме.
Это означает, что все пульты будут работать, даже если вы отключены от сеанса.
Чтобы просмотреть список доступных сеансов, запустите:
$ tmux ls 0: 1 windows (created Sat Jul 15 16:51:35 2017) [134×33] 1: 1 windows (created Sat Jul 15 16:53:58 2017) [134×33]
Вы можете повторно подключиться к сеансу tmux, используя соответствующий идентификатор сеанса, как показано ниже:
tmux attach -t 0
Для получения дополнительной информации см. Справочные страницы.
man tmux
Метод 3 – Использование Reptyr
Что, если вы забыли запустить команды в screen / tmux в первую очередь?
Вот где Рептир приходит на помощь.
Reptyr помогает вам перемещать запущенные процессы между pty.
Метод 4 – Использование nohup
nohup, означает No hangup, еще одна утилита командной строки, которая поможет вам запускать команды Linux даже после того, как вы отключитесь от сеансов SSH.
Поскольку он является частью GNU coreutils, вам не нужно его устанавливать.
Он поставляется предварительно установленным во всех дистрибутивах Linux.
Использование абсолютно простое.
После входа в вашу удаленную систему все, что вам нужно сделать, это:
nohup
Теперь вы можете выйти из сеанса SSH. Удаленное задание будет продолжать работать.
Войдите в удаленную систему и выполните следующие действия, чтобы просмотреть список выполняемых заданий.
$ jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso log.txt #128231; В чем разница между IMAP и POP3
✔️ Как управлять контейнерами LXD от имени обычного.
Руководство для начинающих по созданию первого пакета.
Феноменальная популярность электроники Xiaomi: основные причины
Получение вчерашней даты в Bash: Практическое руководство
Использование специальных гелей при мышечных болях
Сравнение команд Printf и Echo на Linux
Как расширить/увеличить файловую систему VxFS на Linux
Услуги по размещению серверного оборудования в ЦОД
Для чего выполняется ИТ консалтинг на предприятиях?
2 комментария
[…] у вас нет tmux, вы можете получить его с помощью диспетчера пакетов […]
[…] — это клон tmux (терминальный мультиплексор), который обеспечивает […]
Leave a Comment Cancel Reply
• Свежие записи
- В чем разница между IMAP и POP3
- ✔️ Как управлять контейнерами LXD от имени обычного пользователя
- Руководство для начинающих по созданию первого пакета Debian
- Феноменальная популярность электроники Xiaomi: основные причины
- Лаки Джет онлайн игра.
- Можно ли выучить английский самостоятельно?
- Техническая поддержка сайта на 1С-Битрикс: ключевые направления и нюансы
- Как переместить весь репозиторий Git
- GitLab CI: Как создавать образы Docker в Kubernetes
- Идеальные звуки: Всё, что нужно знать о лучших наушниках на рынке
• Категории
• Теги
• itsecforu.ru
• Страны посетителей
IT is good
Протоколы, используемые для получения электронной почты, являются важной частью функционирования Интернета, и все же они остаются практически незаметными для большинства пользователей. Два наиболее…
Управляем контейнерами LXD от обычного пользователя ( не root). Попробуйте использовать утилиту lxc как обычный пользователь. $ lxc list Error: Get «http://unix.socket/1.0»: dial…
Создание пакета Debian может показаться сложной задачей для новичков, но как только вы поймёте процесс, он станет вполне выполнимым. Давайте покажем вам создание…
Xiaomi, китайская технологическая компания, в последние годы штурмом захватила рынок электроники. В интернет-магазине pixel-centre.ru вас ждет огромный выбор товаров данного бренда. Одним из ключевых факторов…
Лаки Джет: новый хит среди онлайн-игр Что такое Лаки Джет? Многие наверняка слышали это название, и это неслучайно. Популярность проекта Lucky Jet набирает обороты в категории…
Источник: itisgood.ru