Перенести поточну команду на знімний сеанс (tmux / screen)


41

Наразі я запускаю резервну копію, і тепер її потрібно перенести на знімний, наприклад, на tmuxабо screen. Чи є спосіб це зробити, коли команда зараз виконується?

Я можу надіслати команду фоном, натиснувши клавішу Ctrl+ Zі повернути її назад, видавши fgкоманду. але я не знаю, чи може цей сеанс повернутися, коли я виходжу з терміналу.


1
Немає цього зробити. Ви повинні запустити команду з сеансу на екрані (або іншого), щоб її можна було від’єднати.
Дан Д.

Відповіді:


45

Це працює більшість часу:

Передумови: мати reptyrта tmux/ screenвстановити; ви зможете знайти їх за допомогою, apt-getабо yumзалежно від вашої платформи.

  1. Використовуйте Ctrl+, Zщоб призупинити процес.

  2. Відновіть процес у фоновому режимі за допомогою bg

  3. Знайдіть ідентифікатор процесу фонового процесу за допомогою jobs -l

    Ви побачите щось подібне до цього:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Відключіть завдання від поточного батьківського (оболонки) с disown yourprocessname

  5. Почати tmux(бажано), або screen.

  6. Повторно приєднайте процес до tmux/ screenсесії за допомогою репліка:

    reptyr 11475
    
  7. Тепер ви можете від'єднати мультиплексор (за замовчуванням Ctrl+ B, Dдля tmuxабо Ctrl+ A, Dдля screen) та відключити SSH, поки ваш процес триває в tmux/ screen.

  8. Пізніше, коли ви знову підключитесь до SSH, ви можете приєднатись до свого мультиплексора (наприклад, tmux attach).


2
На жаль, після запуску sudo reptyr 1430я все-таки отримав: "... [-] Неможливо відкрити tty у дитини. Неможливо приєднати до pid 1430: Дозвіл відхилено"
Daryl Spitzer

3
Ви можете досягти успіху з опцією -L, наприклад, у вашому випадку рептиром -L 1430.
cgseller

1
Виконайте це за необхідності:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Янхао

він також знаходиться на Arch через yo: archlinux.org/packages/community/i686/reptyr (не підходить чи ні)
Tommy

1
Після bgцього процес повинен запускатися на задньому плані, так jobsслід сказати, Runningа не Stopped.
G-Man каже: "Відновіть Моніку"

2

reptyr це добре, але я отримав помилку дозволу

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

Потім знайшли
-L Like '-l', but also redirect the child's stdio to the slave.

що працювало як шарм

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
Коли я додав, -Lя отримав таке повідомлення, як ваше твердження, Opened a new pty: /dev/pts/6але моє призупинення topне з’явилося в tmux. чого я тут пропускаю?
Мехрад Махмудян

-1

Ви можете скористатися відключеним, щоб від'єднати завдання від його терміналу, якщо ця команда доступна.

безпечніше це запустити з nohup, щоб почати з хоч.


Чи можете ви розширити це? Що ви маєте на увазі почати з цього nohup? Як працює disowningпроцес?
Дарт Android

disown відокремлює фоновий процес (який ви ставите на задній план з control-z) від терміналу, щоб процес продовжувався після відсутності терміналу. Ви можете просто ввести відключення після control-z, якщо команда знайдена. однак це теоретично і може не працювати надійно. наступного разу безпечніше, додавши ногуп в передній частині програми, щоб ви могли безпечно вийти з терміналу.
johnshen64

Як я вже говорив, я вважаю, що "відхилення" є досить ненадійним. nohup насправді не дуже кращий. Рептир може бути рішенням. github.com/nelhage/reptyr
anastrophe

Це не дає відповіді на запитання. Питання полягає не лише в тому, "як я закрию термінал, не вбиваючи резервну копію", це "як я відновити його згодом". На яку правильна відповідь - "ти не можеш".
Гейб

Я бачу тут можливу семантичну розбіжність, і це досить популярний результат пошуку за такими ключовими словами, як "переїзд", "незалежно від позиції", "від'єднання tmux" тощо. Ви мали на увазі "ви не можете" через різне відображення пам'яті між зупинкою програми та її відновленням? Програма резервного копіювання лише дізнається, які файли потрібно створити, створити файлову структуру, і структура файлу існує для того, щоб ця фізична пам'ять відображалася в майбутньому. (Ми робимо резервну копію на той випадок, коли це не так!)
Джон П
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.