Как я могу воспроизвести команды, запущенные на одной машине на другой?

8

Я хотел бы установить программное обеспечение на Linux-машине, которую я запускаю в VirtualBox. Тогда я хотел бы сделать то же самое на Linux-VPS.

Я думаю, что я могу сохранить все команды, которые я запускаю, используя historyкоманду. Можно ли как-нибудь запустить эти команды на другом компьютере? Или как это сделать?

Jonas
источник

Ответы:

5

Ну, я представляю 2 ситуации здесь:

  1. Если мне нужно выполнить небольшое количество команд, я бы просто запустил их снова на любой другой машине (под небольшим числом я имею в виду менее 10)

  2. Если мне нужно выполнить много команд, я бы поместил их в скрипт bash и запустил скрипт на всех других машинах. Сценарий должен выглядеть так:

    #!/bin/bash
    command 1
    command 2
    command 3
    command 4
    

Если вы не уверены в результате выполнения некоторых команд, вы можете разделить команды &&, что означает, что следующая команда будет выполняться только в том случае, если предыдущая была успешной. command1 && command2означает, что команда2 не будет выполнена, если команда1 не выполнена.

Паткос Чаба
источник
Спасибо за отличный ответ. Я настрою PHP + Nginx + PostgreSQL, так что я думаю, что решение сценария - это путь.
Джонас
Зависит от того, сколько вы уже знаете, как это сделать, и сколько раз вы планируете дублировать этот процесс. (Хотя это не автоматизировано, наиболее тщательный подход для одного или двух раз, вероятно, заключается в том, чтобы сохранить большой документ, включающий фрагменты рабочего кода, а также мысли и примечания о процедуре установки, к которым вы можете обратиться позже ...) Как только вы знаете, как все работает, тогда вам обязательно нужно написать большой скрипт на Bash или Puppet или что-то еще.
Кевин Канту
5

Есть несколько инструментов, которые позволяют вам входить в систему и выполнять серии команд на нескольких машинах одновременно. Вот пара:

Калеб
источник
3

Паткос прав, наверное, лучше всего создать сценарий. Однако для этого иногда приходится экспериментировать, пока не получится правильно, и вам не понадобится журнал того, что вы сделали и каков был результат. Здесь инструмент scriptпригодится.

Он создает запись всей активности в терминале, в котором он работает:

Скрипт создает машинопись всего, что напечатано на вашем терминале. Это полезно для студентов, которым нужна бумажная запись интерактивного сеанса в качестве доказательства задания, поскольку файл машинописного текста можно распечатать позже с помощью lpr (1).

fschmitt
источник
Спасибо, я узнаю больше об этом. Это выглядит интересно.
Джонас
как насчет того, чтобы сделать все на одной машине, затем проверить файл истории (например, ~ / .bash_history для bash или ~ / .histfile для zsh) и, возможно, скопировать его заново?
phunehehe
История, вероятно, усекается до последних 100 команд или какого-то другого предела произвольного размера, поэтому вам нужно проверить это.
Кевин Канту
2

http://docs.fabfile.org/0.9.2/ <--- Отличная замена сценариям, так как она может предпринимать действия в случае неудачного шага

Crankyadmin
источник
2

Я создал инструмент с открытым исходным кодом под названием Overcast, чтобы упростить эту задачу.

Вы можете раскрутить машины Virtualbox локально (использует Vagrant под капотом) или на нескольких разных облачных провайдерах, а затем запустить любые команды или файлы сценариев на всех из них:

# Spin up Ubuntu 14.04 instances on Virtualbox, DigitalOcean, and Linode:
overcast virtualbox create vm.01
overcast digitalocean create vm.02
overcast linode create vm.03
# Run an arbitrary sequence of commands and scripts across all of them:
overcast run vm.* uptime "free -m" ./path/to/my-script.sh
Эндрю Чайлдс
источник
Хорошая документация!
1

Если вы хотите сначала запустить команды в интерактивном режиме на одном компьютере, а затем создать сценарий для их запуска на других компьютерах, просто откройте .bash_history (или любую другую оболочку) в текстовом редакторе и удалите все ошибки, которые вы сделали в первый раз. около. Вуаля! У вас есть скрипт, который вы можете скопировать на другие машины (с помощью scp, rsync и т. Д.).

В некоторых случаях вам, возможно, придется сначала немного обработать файл. Например, я использую zsh и настроил его для добавления различных метаданных (меток даты). Очевидно, вам нужно удалить это. Вы можете легко сделать это в vim или TextMate, или, возможно, в любом приличном редакторе, используя выбор блоков. Или вы можете использовать awk или cut для вывода всего, кроме метаданных. Вот один из способов сделать это:

cat .zhistory | cut -d';' -f2- 

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

иконоборец
источник