LinuxForum.Fans
Тема

Программирование bash

Автор: bykva 13 сообщений 2487 просмотров
#226198

как можно выполнить команду на удаленной машине? имеется ввиду что нужно например либо заставить запуститься скрипт на машине 2 из-под машины 1, но не устанавливая конект по ссш, либо заставить ее продолжить выполнение команды после установления конекта по ссш.
как пример: на машине 1 вводим команду, которую выполнит вторая машина: создать пустой файл
тоесть глобально: я делаю выгрузку из pgsql и хочу чтобы после перемещения файла на другой комп эта выгрузка загрузилась в ту sql, но я хз как заставить машину выполнить команду не вводя ее вручную ведь после коннекта по ссш рабочая машина не перенесет продолжение выполнения введенной команды на новую машину

#226202

одно из двух:
если нужно, чтобы сессия была активна до конца выполнения команды , тогда ssh <host> <command>
если нужно сразу закрыть сессию, то смотрите в сторону nohup или screen

#226203

я хочу 1 раз ввести команду, пускай длинную, и чтобы она продолжила свое выполнение на другой машине, чтобы не приходилось вводить ее заново.
а-ля "выгружаем базу | зипуем && передаем по сети && устанавливаем коннект по ссш && раззиповываем и загружаем в новую sql"

#226204
Fat-Zer написал:
одно из двух:
если нужно, чтобы сессия была активна до конца выполнения команды , тогда ssh <host> <command>

спасибо именно этого я и хотел =)

#226205
text
ssh <host> <command>

но не устанавливая конект по ссш

...

#226206

по порядку:

bykva написал:
выгружаем базу | зипуем

с этим у вас же проблем нет?

bykva написал:
передаем по сети

scp, проблем нет

bykva написал:
устанавливаем коннект по ссш && раззиповываем и загружаем в новую sql

для второй части можно сделать небольшой скриптик,тогда нужно только ssh <host> mega_unbackup_script.sh
перед mega_unbackup_script.sh можно поставить nohup(см. man), чтобы не ждать окончания...

ЗЫ: чтоб всё это автоматом в крон засунуть ещё стоит освоить аутентификацию по ключу.

#226207
Fat-Zer написал:
по порядку:

вобщем-то я решил проблему. в конечном виде все выглядит вот так:

text
sudo mkdir /home/temp_before && sudo -u postgres pg_dump -h localhost -U postgres -c DocMng | gzip >> /home/temp_before/DocMng.gz && scp /home/temp_before/DocMng.gz root@192.168.0.5:/home/DocMng.01.02.12.gz && rm -rf /home/temp_before && ssh root@192.168.0.5 sudo -u postgres gunzip -c /home/DocMng.gz | psql -h localhost -U postgres DocMng
#226208
bykva написал:
ssh root@192.168.0.5 'sudo -u postgres gunzip -c /home/DocMng.gz | psql -h localhost -U postgres DocMng'

кавычки забыли
и root'у ssh-доступ давать не лучшая идея

#226209
Fat-Zer написал:
кавычки забыли

а у меня и без кавычек работает wink

#226211
bykva написал:
а у меня и без кавычек работает

а вот и нет. последняя команда выполняется локально, а не удалённо... можете изменить локальную базу и проверить - удалённая не изменится.

по идее должно работать и без сжатия:

text
sudo -u postgres pg_dump -h localhost -U postgres -c DocMng |  ssh root@192.168.0.5 'psql -h localhost -U postgres DocMng'

при желании в середину можно вставить сжатие.

#226217
Fat-Zer написал:
text
sudo -u postgres pg_dump -h localhost -U postgres -c DocMng |  ssh root@192.168.0.5 'psql -h localhost -U postgres DocMng'

при желании в середину можно вставить сжатие.

не совсем понимаю как будет работать конвеер... выгрузку из базы направить на ввод ссш, вот в этом месте как будет реализовано?

#226220
bykva написал:
выгрузку из базы направить на ввод ссш, вот в этом месте как будет реализовано?

ssh просто перенаправляет всё это на вход psql на удалённом хосте.
с gzip'ом такое без проблем срабатывает... ИМХО с psql тоже проблем быть не должно...

#226221

ага, спасибо, попробую!

Войдите или зарегистрируйтесь, чтобы ответить.