Тримайте SSH-сеанси після відключення


208

Іноді у мене є тривалі процеси, які я хочу розпочати, перш ніж їхати додому, тому я створюю сеанс SSH на сервері, щоб почати процес, але потім я хочу закрити свій ноутбук і піти додому, а пізніше, після обіду, я хочу перевірити процес, який я розпочав перед відходом від роботи. Як я можу це зробити з SSH? Я розумію, що якщо ви перервете з’єднання SSH, ви також порушите сеанс входу на сервер, що призведе до вбивства тривалого процесу.

Відповіді:


205

Використовуйте nohupдля того, щоб ваш процес ігнорував сигнал зависання:

$ nohup long-running-process &
$ exit

20
Так і є. Не потрібно встановлювати екран або tmux. Це насправді старий хороший спосіб зробити це. Звичайно, "екран" або "tmux" - це чудові програми, і їх слід використовувати при необхідності, але так само просто, як запускати процес у фоновому режимі, з якого ви можете вийти, перейдіть до вищезазначеного.
reiche

2
це nohup, як відречення?
cjac

28
Вони мають подібні цілі, але вони багато в чому різняться. nohupперехоплює SIGHUP, так що коли оболонка, яка його запустила, закривається та відправляє SIGHUP усім своїм ще діючим дітям, long-running-processне загине. disownпросто видаляє вказану роботу зі списку дітей Баша, тому вона взагалі не намагатиметься надсилати SIGHUP. nohupце програма, окрема від оболонки, тому вона працює з усіма оболонками, тоді як disownце вбудований Bash. nohupприймає команду для запуску, тоді як disownпрацює лише після того, як завдання запущене, і ви його зробили в фоновому режимі, щоб ви могли повернутися до оболонки.
Воррен Янг

3
Дивовижний короткий огляд для тих , хто не знайомі з поЬір і відхреститися - а також кілька простих способів боротьби з термінальними сесіями serverwatch.com/tutorials/article.php/3935306 / ...
Dan

7
tail -f nohup.outщоб перевірити, що відбувається, коли ти повернувся.
Рікардо Стувен

141

Ви хочете використовувати екран GNU. Це супер приголомшливо!

ssh me@myserver.com
screen               #start a screen session
run-a-long-process

CTRL+ a, dщоб від'єднатись від екранного сеансу

exit                 #disconnect from the server, while run-a-long-process continues

Коли ви повернетесь до свого ноутбука:

ssh me@myserver.com
screen -r            #resume the screen session

Тоді перевірте хід свого тривалого процесу!

screenце дуже всебічний інструмент, і може зробити набагато більше, ніж те, що я описав. Перебуваючи на екрані, спробуйте ctrl + a,? щоб дізнатися кілька загальних команд. Напевно, найбільш поширеними є:

  • CTRL+ a, cщоб створити нове вікно
  • CTRL+ a, nщоб перейти до наступного вікна екранного сеансу
  • CTRL+ a, pщоб перейти до попереднього вікна вашого екранного сеансу
  • якщо ви входите з безлічі різних систем, можливо, ви випадково залишилися прив’язаними до активного сеансу на екрані на іншому комп’ютері. з цієї причини я завжди поновлююсь із screen -d -rтим, що якщо до мого сеансу на екрані додається інша оболонка, вона буде від'єднана, перш ніж відновити її в моїй поточній системі.

8
tmux - сучасний аналог екрану.
zvolkov

Я не знаю про сучасний, але префікс ключа tmux (Ctrl + b) за замовчуванням допомагає, якщо ви використовуєте ключі bash / emacs.
sajith

2
екран досить класний, якщо ви хочете з якихось причин поділитися спільним терміналом. Створіть екран screen -S nameі дозвольте іншому другові підключитися до нього screen -x name.
Патрік

1
tmuxз tmuxinator- це чудове поєднання для фантазійних налаштувань, тоді як я вважаю за краще screenшвидке і просте рішення.
earthmeLon

Ця відповідь найкраща .. Мені подобається. Відмінне дослідження
Джеффер Вілсон

42

Якщо ви не планували заздалегідь і налаштування screenтощо, просто виконайте наступне:

  1. Якщо ваш процес працює у фоновому режимі: goto # 3, else: Ctrl-Zпризупинити процес переднього плану. Це повідомить про роботу # призупиненого процесу, наприклад:

    [1]+  Stopped                 processName
    
  2. Відправити processNameна задній план за bg %1допомогою (використовуючи те, що робота # виконується після виконання %). Це відновиться processNameу фоновому режимі.

  3. Відхилений processName від disown %1або disown PID. Використовуйте -hпрапор, якщо ви хочете зберегти право власності, поки ви не припините поточну оболонку.


5
Дякую за це! У мене була робота, і я думав, що не зможу продовжувати її працювати, тому що я не використовував її, &коли я її починав. Це, здається, працює чудово!
Метт

4
Це дивно! Я ніколи не знав, що Linux може дозволити вам передати контроль над активними процесами на кшталт цього. Я побоювався, що моя батарея загине, поки SSH'ing потрапляє на мій сервер в середині тривалого процесу, і це була відповідь для мене!
Плутон

14

Що ви хочете використовувати, - це екран або ще краще зручна обгортка навколо екрану під назвою byobu.

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

byobu - це обгортка, яка дозволяє легко відкривати нові екрани за допомогою простої функціональної клавіші замість комбінації клавіш із ctrl-a. Він також показує рядок стану з усіма відкритими віртуальними терміналами, які можна назвати.

Ще однією приємною особливістю є той факт, що під час відключення вашого ssh-з'єднання під час відключення вашого ssh-зв’язку весь екран може залишатися в режимі спокою Ви просто знову підключитесь через ssh та подзвоните byobu, і все як раніше.

Нарешті кілька скріншотів byobu.


Я запустив процес на своєму сервері в терміналі Byobu, не знаючи, що це таке (я просто шукав термінал і натискав на Byobu, тому що раніше цього не бачив). Я продовжував використовувати Byobu, оскільки внизу був барвистий рядок стану, і я вважав, що це круто. Сьогодні я виявив, що хочу отримати доступ до цього термінального сеансу дистанційно через SSH. Все, що я повинен був зробити, це набрати "byobu", і це показало, що термінальний сеанс відразу. Дійсно щасливий, що я наткнувся на byobu!
нік

8

Це, можливо, варто зазначити

ssh -t lala screen -rxU mooприєднається до сеансу Moo на хості lala

ssh -t lala screen -S mooстворить му- сеанс на хості lala

і

ssh -t lala screen -S moo quuxстворить му- сеанс на хості lala та запустить програму quux , закривши сеанс після завершення.


3

Старе питання, дивне досі ніхто не радив tmux , який виконує функцію обгортки для російських консолей і тримає їх відкритими до необхідності. Це дозволяє більше контролювати, крім ряду функцій, які має tmux. Керувати нею просто, ви просто виконуєте tmux, який приводить вас у свою оболонку, запускаєте роботу в looong, потім натискаєте ctrl + b, а потім d (detach) ( ctrl+bце "ok Google" від tmux, і dце команда закрити без виходу з оболонки). Це фактично спрацьовує, якщо просто закрити, наприклад, шпаклівку. Після обіду, коли ви знову підключитесь, ви можете знову відкрити tmux, tmux attachщоб побачити екран точно так, як ви вийшли. Щось, що я люблю, це розділити панель: ctrl+bа потім натиснути ". Щоб перейти з однієї області на іншу, ctrl+bа потім натисніть стрілку вгору / вниз.


3

Тут ви можете знайти хороший посібник: Тримайте сеанс SSH під час відключення

sudo apt-get install screen

Тепер ви можете почати новий екранний сеанс, просто набравши екран у командному рядку. Вам буде показана інформація про екран. Натисніть Enter, і ви будете мати звичайний запит.

Щоб відключити (але залишити сеанс запущеним) натисніть клавішу Ctrl+, Aа потім негайно Ctrl+ D. Ви побачите повідомлення [окреме]

Щоб знову підключитися до вже запущеного сеансу

screen -r

Повторно підключитися до існуючого сеансу або створити новий, якщо такого немає

screen -D -r

Щоб створити нове вікно всередині запущеного екранного сеансу, натисніть Hit Ctrl+, Aа потім Cнегайно. Ви побачите нове підказку.

Щоб переключитися з одного вікна екрана на інший Hit Ctrl+, Aа потім Ctrl+ Aнегайно.

Щоб перелічити вікна з відкритими екранами Hit Ctrl+, Aа потім Wнегайно


Ви можете використовувати <kbd>Ctrl</kbd>для показу імен як клавіш клавіатури.
Томаш

1

Я використовую NX NoMachine, який для мене безкоштовний, оскільки це лише я. По суті, він запускає X-сеанс на сервері, до якого ви можете підключитися і відключитись знову і знову. Сеанс X продовжує працювати, коли ви не підключені. Підключення можна зробити з будь-якого місця. Ви можете вибрати між плаваючими вікнами або одним вікном, що містить цілий робочий стіл (наприклад, повний робочий стіл Gnome). Клієнт (який ви запустили б на своєму ноутбуку) можна запустити на Linux, MacOS, Solaris або Microsoft Windows. В останньому випадку, якщо ви вибираєте плаваючі вікна, вони відображаються окремо на панелі завдань Windows.

Я використовую свій ноутбук Windows XP (який мені потрібен для певного Windows-обладнання) як передній для двох моїх серверів Linux, що використовують NX Nomachine. Я навіть можу друкувати на принтері, підключеному до мого ноутбука Windows з Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.