Думаю написать автоматизированный скрипт, который подключается к серверу (ssh), копирует с него файлы. выполнить скрипт на сервере и отключиться.
Возможно ли, чтобы сценарий выполнял код (например, код для выполнения удаленного сценария) с локального компьютера? Я никогда не пробовал и не знаю, как это сделать.
Я понимаю, как использовать scp по большей части, поэтому копирование не проблема
После выполнения 1 я хотел бы знать, как дождаться завершения удаленного скрипта и, возможно, время от времени выполнять скрипт, но отключиться и оставить скрипт запущенным на сервере. Как я могу это сделать? (это должно быть в отдельном вопросе)
A1) Чтобы выполнить команду на удаленном сервере:
ssh server "/usr/local/sbin/command"
Используя этот метод, сеанс ssh будет ждать завершения процессов переднего плана.
A3) Чтобы выполнить фоновый процесс на удаленном сервере, запустите:
ssh server "nohup /usr/local/sbin/command &"
То, что вы описываете, звучит довольно просто (и, как говорили другие, легко реализовать). В голове что-то вроде:
# with a file named after each node:
SERVERS=`ls /etc/cluster/members`
THIS_NODE=`uname -n`
REMOTE_NAME="/var/cluster/incoming/${THIS_NODE}_$$"
for (i in ${SERVERS}); do
scp $1 ${i}:${REMOTE_NAME}
ssh ${i} "bash ${REMOTE_NAME}"
done
Однако, когда вы вникаете в подробности того, что может быть решено, и работая не с парой серверов, проблема начинает очень быстро усложняться.
Возможно, вы захотите взглянуть на nrpe с Nagios для вещей, которые запускаются регулярно, или Canonical Пейзаж для запуска специального материала на большом количестве серверов (одна из основных функций этого приложения - установка исправлений, но его можно использовать для всех видов вещей - и во всех типах ОС).
HTH
С.
В вашем случае может быть полезно изменить свой алгоритм:
... подключается к серверу (ssh), копирует с него файлы. выполнить скрипт на сервере и отключиться.
следующим образом: подключается к серверу (ssh), копирует с него файлы, отключается, запускается фоновый скрипт.
Чтобы иметь здесь цель, неплохо было бы создать отдельного пользователя для копирования:
#useradd -p xxxx -d /home/username username
затем внесите некоторые изменения в этого пользователя .bash_logout
файл:
if [ "$SHLVL" = 1 ]; then
nohup /usr/local/bin/command &
fi
После этого сгенерируйте ключи ssh для новичков и настройте параметры удаленного входа так, как вам удобнее.
Теперь каждый раз при копировании, например scp user@host:/directory/SourceFile TargetFile
выполнено, фоновая задача /usr/local/bin/command
должен быть запущен в удаленном ящике.
не при «нормальной» настройке, но возможно, если вы используете сетку или кластерный движок. Просто скопируйте скрипт и выполните его
чтобы оставить скрипт запущенным просто daemonize (запустить в фоновом режиме с stdin и перенаправить его на / dev / null), т.е.
ssh remotehost "команда> / dev / null 2> & 1 </ dev / null &"
если вы хотите подождать, но делать другие вещи, используйте wait, как с локальными процессами
ssh firsthost command &
ssh secondhost othercommand &
...
wait