32

В настоящее время я использую резервную копию, и теперь ее нужно перенести в съемную, например, на tmux или screen . Есть ли способ сделать это, когда команда в данный момент выполняется?

Я могу отправить команду фону, нажав Ctrl+Z, и вернуть ее обратно, введя команду fg . но я не знаю, может ли эта сессия вернуться, когда я выхожу из терминала.

3 ответа3

34

Это работает, в большинстве случаев:

(предварительные условия: у вас установлены 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:

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

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

1

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
-1

Вы можете использовать disown, чтобы отсоединить задание от его терминала, если эта команда доступна.

для начала безопаснее запустить его с nohup.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .