Який найкращий спосіб запустити віддалену команду 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.