Скажем, в соединении PuTTY я запускаю
mysqldump --host host1 --databases db1 db2 db3 | mysql
который создает два процесса: mysqldump
с PID 5800 и mysql
с PID 5801. Можно ли позволить запущенным процессам продолжить выполнение, когда я хочу закрыть PuTTY и все еще иметь возможность вернуться к ним позже?
Я нашел здесь несколько ответов, касающихся одного процесса и того, как использовать reptyr
переродить это к screen
, но меня беспокоит, как справиться с двумя параллельными процессами.
Есть много вариантов ответа, использовать или нет screen
, tmux
или инструменты, или выполняются как фоновые задачи с использованием отдельных файлов журнала ...
Вы могли бы использовать по имени FIFO:
mkfifo $HOME/mysqlFifo
Затем запустите два отдельных Терминал приставка:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
и во втором окне:
mysql <$HOME/mysqlFifo
Тогда пусть работает ...
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
...
Оставьте занятый сеанс включенным.
Откройте еще одну свежую сессию.
Использовать 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
снова, и вы вернетесь в свою оболочку входа.