Який найкращий спосіб запустити віддалену команду ssh у фоновому режимі, але все ще відображається?


15

Мені потрібно запускати SSH команди віддалено, вихід виводиться локально. Але якщо з'єднання розривається, я хочу, щоб команда все-таки виконувалася.

Я не так багато говорю про вхід у систему та виконання, але про те, щоб виконувати ssh user @ remotehost "команди && команда тощо"

Як я можу забезпечити виконання команди, навіть якщо з'єднання розривається?

Відповіді:


27

Найкращий спосіб зробити це за допомогою екрана, який зберігає сеанс постійно відкритим, навіть якщо з'єднання загине (і якщо ви хочете знову почати його використовувати, ви можете зробити це, screen -rі він відкриється знову).

Префіксація будь-якої команди, з якою ви хочете запустити screen(наприклад, ssh -t user@host screen command) повинна виконати цю роботу.

Якщо ви хочете, щоб він працював у фоновому режимі оболонки, ви також можете додати додаток &до всієї справи.


Ймовірно, вам потрібно буде використовувати ssh -t для виділення терміналу для запуску команди. Інакше помилка "Потрібно підключитися до терміналу."
бонсайвінг

11

Ви хочете мати постійний сеанс, який ви можете відновити, або просто зупинити відключення від вбивства екзекуції?

Для перших використовуйте screen, для останніх - nohup.


7

Як було сказано на початку, screenможна зробити все трюк. Але не тільки те, що потрібно. Я використовую екран протягом багатьох років і зараз використовую його щоразу, коли я входжу в системи. Спробуйте встановити screenта створити за ~/.screenrcдопомогою такого конфігурації:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Потім бігайте screen -Rd vcf. Це кращий виклик екрана. Ви знову підключитесь до раніше створеного сеансу з назвою vcf * (або попередите його, якщо неоднозначно) або, якщо сеанс ще не відкрито, він буде створений. CTRL+ A- це мета-ключ, який робить все. CTRL+A C( CTRL+ A, потім C) створити нове вікно (екран) всередині сеансу. CTRL+A SPACEперемістіть фокус до наступного вікна в раунді. CTRL+A Dвідключити поточний сеанс, підтримуючи всі вікна функціональними між з'єднаннями. Якщо ви запустили якесь завдання в луоонгу, ви можете відірватися від екрана і повторно прикласти його до нього, щоб побачити, що відбувається. Те саме відбувається, якщо ваш сеанс ssh втрачено - екран залишається живим із усіма відкритими вікнами та всіма запущеними завданнями.

Якщо ви хочете закрити якесь вікно всередині екрану - просто exitз оболонки в ньому. Якщо ви хочете закрити всі оболонки / завдання у всіх вікнах та екрані виходу - просто натисніть CTRL+A CTRL+\та натисніть "Y", коли буде запропоновано.

Для всього іншого дивіться екран людини.



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