У меня, как мне кажется, сложная задача.
У меня есть 1 машина, которую мы назовем сервером, и целый ряд других машин, hostX. Все они работают на сервере Ubuntu 16.04. Каждый хост запускает простой скрипт bash при запуске, но этот скрипт в настоящее время имеет жестко закодированные значения. Я хотел бы использовать переменные в этом скрипте, но значения переменных должны храниться в файлах / файлах на сервере, что позволяет мне изменять значения в одном центральном месте и влиять на хост или группу хостов. Я счастлив, что мне придется либо перезагрузить, либо перезапустить скрипт на каждом хосте после изменения, это не проблема. У меня проблема в том, что я не знаю, как использовать переменную с удаленного компьютера, все, что я могу найти, - это информация о запуске сценария на удаленном компьютере. Я хочу, чтобы он работал локально, но извлекал информацию из пульта.
Итак, вот мой рабочий процесс, в моей голове.
Host1 загружается и просматривает содержимое host1.cfg
, расположенного на сервере. host1.cfg
выглядит следующим образом:
NAME=John
ADDRESS='10 The High Street'
AGE=25
Host1 работает:
echo server:$HOSTNAME.cfg:$NAME & $ADDRESS & $AGE
Или может иметь центральный файл HOST.CFG
с:
[HOST1]
NAME=John
ADDRESS='10 The High Street'
AGE=25
[HOST2]
NAME=Mike
ADDRESS='30 The Avenue'
AGE=80
имеет смысл?
Я бы пошёл с файлом для каждого хоста, содержащим переменные, назовем его host1.cfg
, скопирую его в начале скрипта и source
:
rsync user@server:/path/to/host1.cfg .
source host1.cfg
Это перезапишет любой существующий host1.cfg
на хосте, поэтому обновления файла сервера будут применены при следующем запуске. Имейте в виду , что source
выполнит все команды host1.cfg
без пощады. Убедитесь, что он не может быть изменен кем-либо, особенно , если вы запускаете скрипт на хосте от имени пользователя root. Для альтернативных и, возможно, более безопасных подходов (в зависимости от вашей настройки) см .: Как мне прочитать переменную из файла?
Мне нравится rsync
, но вы также можете использовать scp
, wget
или curl
для задания. Если вам не нужна локальная копия, вы можете использовать (благодаря glenn jackman ):
source <(ssh user@server "cat /path/to/host1.cfg")