
Допустим, в соединении PuTTY я начинаю
mysqldump --host host1 --databases db1 db2 db3 | mysql
что создает два процесса: mysqldump
с PID 5800 и mysql
с PID 5801. Можно ли разрешить запущенным процессам продолжить выполнение, когда я захочу закрыть PuTTY, и при этом иметь возможность вернуться к ним позже?
Я нашел здесь несколько ответов, касающихся одного процесса и того, как использовать reptyr
его для повторного назначения родительскому процессу screen
, но меня беспокоит, как быть с двумя процессами, которые выполняются параллельно.
решение1
Оставьте свою напряженную сессию включенной.
Откройте еще одну свежую сессию.
Используйте tmux
, чтобы приложение сохранялось, даже если вы закроете или потеряете соединение ssh. tmux
Похоже на screen
, возможно, немного лучше.
sudo apt install tmux
tmux
Теперь решающий шаг — украсть терминал процессов.
sudo apt install reptyr
ps uw # find one of the PIDs to save, any will do
reptyr -T the_PID
Я заметил одинпобочный эффектметода reptyr -T
. Вы также ловите свою старую оболочку вместе с запущенными приложениями. Если вы exit
сейчас, вы возвращаетесь к оригинальной оболочке tmux/screen. Используйте exit
снова, и вы вернетесь к своей оболочке входа.
решение2
как работать с двумя процессами, которые выполняются параллельно?
Существует множество возможных ответов: использовать или нет screen
, tmux
или инструменты, или запускать в качестве фоновых задач, используя отдельные файлы журналов...
Выполнение двух процессов по отдельности
Вы могли бы использоватьпо имени фифо:
mkfifo $HOME/mysqlFifo
Затем бегите в двух отдельныхТерминалконсоль:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
и во втором окне:
mysql <$HOME/mysqlFifo
А потом дайте ему поработать...
Хочу ли я закрыть PuTTY и иметь возможность вернуться к ним позже?
screen
слишком
Некоторая подготовка:
cat >$HOME/mysqlScreenRc <<eof
screen -t dump mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
screen -t mysql mysql <$HOME/mysqlFifo
eof
mkfifo $HOME/mysqlFifo
затем
screen -S mysql -c $HOME/mysqlScreenRc
или
screen -dmS mysql -c $HOME/mysqlScreenRc
чтобы запустить его в фоновом режиме...
Затем, чтобы подключиться и посмотреть:
screen -r mysql
Чтобы гарантировать, что экран останется открытым после завершения команд, вы можете использовать read
команду:
cat >$HOME/mysqlScreenRc <<eof
screen -t dump sh -c 'mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo;read foo'
screen -t mysql sh -c 'mysql <$HOME/mysqlFifo;read foo'
eof
Но вы можете просто запустить его в фоновом режиме с отдельными журналами:
nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
mysql >/somepath/mysql.log 2>/somepath/mysql.err &
Итак, вы можете закрыть эту консоль, а затем посмотреть файлы в /somepath
...